我在文件中有一行。喜欢:
我想通过在第4个管道之前和之后的双引号之后添加\ n来分成两行。
应该是这样的:
我已经尝试过sed命令,但它不起作用
sed 's/\(|[^|]*\)(|[^|]*\)(|[^|]*\)|/\1\n|/g'
你可以用
sed 's/\([^|]*|\)\{3\}[^|]* /&\n/' file > newfile
细节
\([^|]*|\)\{3\}
- 三个连续出现的
[^|]*
- 除了|
之外的0+个字符
|
- 管道符号[^|]*
- 除了|
之外的0+个字符
- 一个空间替换模式是&\n
,整个匹配(&
)和换行符(\n
)。
由于我删除了g
选项,因此每行只进行一次替换。
为避免过度使用,您可以使用基于POSIX ERE的sed
:
sed -E 's/([^|]*\|){3}[^|]* /&\n/' file > newfile
你不需要逃避捕获括号和范围/区间量词大括号(但你必须逃避文字|
字符)。
这可能适合你(GNU sed):
sed 's/[^ |]*|/\n&/4' file
在|
分隔的第四个字段之前插入换行符。