首页 > 解决方案 > 如何在unix文件中的第4个管道之前和最后一个双引号之后添加\ n

问题描述

我在文件中有一行。像:

我想通过在第 4 个管道之前和最后一个双引号之后添加 \n 将其分成两行。

它应该是这样的:

我试过 sed 命令,但它不起作用

sed 's/\(|[^|]*\)(|[^|]*\)(|[^|]*\)|/\1\n|/g' 

标签: fileunixsed

解决方案


您可以使用

sed 's/\([^|]*|\)\{3\}[^|]* /&\n/' file > newfile

查看在线演示

细节

  • \([^|]*|\)\{3\}- 三个连续出现
    • [^|]*- 0+ 以外的字符|
    • |- 管道符号
  • [^|]*- 0+ 以外的字符|
  • - 空间

替换模式是&\n,整个匹配 ( &) 和换行符 ( \n)。

g由于我删除了该选项,因此每行仅进行一次替换。

为避免过度转义,您可以使用基于 POSIX ERE 的sed

sed -E 's/([^|]*\|){3}[^|]* /&\n/' file > newfile

您不需要转义捕获括号和范围/间隔量词大括号(但您必须转义文字|字符)。


推荐阅读