与任意多个组分开

Han*_*ans 0 bash sed

我有很多文件有很多条目(每行一个条目),我必须通过一系列的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管道序列.

P..*_*... 5

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)

  • 您可以使用:`awk'/ - >/{gsub(/ [\ t]*( - > |,)[\ t]*/,ORS)} 1'文件删除`column -t` (3认同)