我有很多文件有很多条目(每行一个条目),我必须通过一系列的greps和seds进行过滤.这些线条的形式
a
x, y
u --> v, w
s --> p, q, r
Run Code Online (Sandbox Code Playgroud)
其中一个步骤是拆分包含-->这样的行,使得左侧和右侧的每个逗号分隔的条目(其中可以有任意多个)最终在不同的行上.即,以上行应成为:
a
x, y
u
v
w
s
p
q
r
Run Code Online (Sandbox Code Playgroud)
快速完成左侧与右侧的分离:
echo "u --> v, w" | sed 's/\(.\+\)\s*\-\->\s*\(.\+\)/\1\n\2/'
Run Code Online (Sandbox Code Playgroud)
给我
u
v, w
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个死胡同,因为我无法通过管道来分裂逗号,因为这也会分裂x, y.
所以,我想知道是否有办法在sed命令中完全拆分这些行,或者我是否必须转向,例如,awk(或只是转到Python)?最好将它保持为bash管道序列.
awk '/-->/ {gsub(/-->|,/,RS)}1' inputfile|column -t
a
x, y
u
v
w
s
p
q
r
Run Code Online (Sandbox Code Playgroud)
或者正如Anubhav建议避免管道:
awk '/-->/ {gsub(/[ \t]*(-->|,)[ \t]*/ , ORS)} 1' inputfile
Run Code Online (Sandbox Code Playgroud)