如何在unix文件中的第四个管道之前和最后一个双引号之后添加\ n

时间:2018-09-12 11:26:57

标签: file unix sed

我在文件中有一行。喜欢:

  • 1 | 4 | ab |“ abnchf” dnvjnkjf“ fdvjnfkjnv” 2 | 12 | df |“ dskfnkfv” A“

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

应该像这样:

  • 1 | 4 | ab |“ abnchf” dnvjnkjf“ fdvjnfkjnv”

    2 | 12 | df |“ dskfnkfv” A“

我尝试了sed命令,但是它不起作用

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

2 个答案:

答案 0 :(得分:1)

您可以使用

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

请参见online demo

详细信息

  • \([^|]*|\)\{3\}-的三个连续事件
    • [^|]*-除|以外的0个字符
    • |-管道符号
  • [^|]*-除|以外的0个字符
  • -一个空格

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

自从我删除了g选项以来,每行替换一次。

为避免溢出,您可以使用基于POSIX ERE的sed

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

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

答案 1 :(得分:0)

这可能对您有用(GNU sed):

sed 's/[^ |]*|/\n&/4' file

在由|分隔的第四个字段之前插入换行符。