0

我需要把'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 中是否有任何解决方法,只需一行?

4

3 回答 3

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)甚至更多。

于 2012-04-26T04:55:14.157 回答
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
于 2012-04-26T05:59:27.587 回答
1

我不确定这是否符合“单线”的条件......

print 'aaa bbb'  | sed 's/ /
/g'

...这是一个单一的命令,我认为我以前在 at&t sed (或任何 SCO Unix 使用的)上使用过...

于 2012-04-26T06:13:48.810 回答