我在文件中有一行。喜欢:
我想通过在第4个管道之前和最后一个双引号之后添加\ n来分成两行。
应该像这样:
1 | 4 | ab |“ abnchf” dnvjnkjf“ fdvjnfkjnv”
2 | 12 | df |“ dskfnkfv” A“
我尝试了sed命令,但是它不起作用
sed 's/\(|[^|]*\)(|[^|]*\)(|[^|]*\)|/\1\n|/g'
答案 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
在由|
分隔的第四个字段之前插入换行符。