我需要将'aaa bbb'打破
aaa
bbb
在一行代码中。 在gnused中,我可以:
print 'aaa bbb' | sed 's/ /\n/g'
在bash,我可以:
echo 'aaa bbb' | sed 's/ '"/`echo \\\n`/"
但是在ksh / zsh中,在AIX中使用at& t sed,这些都不起作用:
print 'aaa bbb' | sed "s/ /`echo -e \\\n`/"
print 'aaa bbb' | sed 's/ '"/`echo \\\n`/"
print 'aaa bbb' | sed "s/ /`echo \\\n`/"
sed中是否有任何解决方法,在一行中?
答案 0 :(得分:1)
假设该行中只有一个空格:
sed 'h;s/^[^ ]* //;x;s/ [^ ]*$//;G'
要为每个空间执行此操作:(我认为我在此处触发了本地sed
中的错误;我无法将上述命令组合在一起)
$ echo aaa bbb ccc def ghi zzz |
> sed -e :s -e h -e 's/ .*$//' -e p -e x -e 's/^[^ ]* //' -e ts -e d
aaa
bbb
ccc
def
ghi
zzz
(你可以看到为什么扩展GNU sed以更好地处理这种情况。)你可以使用保留空间做各种事情,如果使用条件分支(s/.../.../;thereifmatched
),甚至可以做更多事情。
答案 1 :(得分:1)
这可能对您有用:
echo -e "aaa bbb ccc\nxxx yyy zzz" |
sed 'G;:a;s/ \+\(.*\(.\)\)/\2\1/;ta;s/.$//'
aaa
bbb
ccc
xxx
yyy
zzz
或者也许:
echo -e "aaa bbb ccc\nxxx yyy zzz" |
sed -e 'G' -e ':a' -e 's/ \+\(.*\(.\)\)/\2\1/' -e 'ta' -e 's/.$//'
aaa
bbb
ccc
xxx
yyy
zzz
答案 2 :(得分:1)
我不确定这是否属于“在一条线上”......
print 'aaa bbb' | sed 's/ /
/g'
......这是一个单一的命令,我认为我之前已经习惯了(或者SCO Unix使用的)...