0

「aaa bbb」を分割する必要があります

aaa
bbb

1 行のコードで。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`/"

1行で、sedに回避策はありますか?

4

3 に答える 3

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

これが「1行で」と見なされるかどうかはわかりません...

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

...それは単一のコマンドであり、以前に at&t sed (または SCO Unix が使用するもの) で使用したことがあると思います...

于 2012-04-26T06:13:48.810 に答える
1

行にスペースが 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 に答える