2012-04-26 13 views
0

にマッチ線を破る私は、コードの1行でkshのとAT&Tは、パターン

aaa 
bbb 

に 'AAA BBB' を破壊する必要があります。 gnusedでは、私のことができます。

bashで
print 'aaa bbb' | sed 's/ /\n/g' 

、私がすることができます

echo 'aaa bbb' | sed 's/ '"/`echo \\\n`/" 

しかし、kshの/ zshの中

、&でトンSED AIXで、これのどれも働かないで:

print 'aaa bbb' | sed "s/ /`echo -e \\\n`/" 
print 'aaa bbb' | sed 's/ '"/`echo \\\n`/" 
print 'aaa bbb' | sed "s/ /`echo \\\n`/" 

sedには1行で回避策がありますか? ごとスペースをこれを行うには

sed 'h;s/^[^ ]* //;x;s/ [^ ]*$//;G' 

:行で正確に一つのスペースを想定し

答えて

1

(私はここに私の地元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)を使用し、さらに場合。

+0

hmm、 'aaa bbb ccc ddd ...'のように長い行にする必要がある場合 – MeaCulpa

+0

'ksh'を使ってシェル変数を使っているのなら、' sed'を完全に避けることができます: '$ {line#*} 'は最初のスペースに続くもの、' $ {line%*} 'は最初のスペースの前のものです。 *最後の*スペースを使うために '#'や '%'を二倍にしてください。 – geekosaur

+0

@MeaCulpa、編集された答えをご覧ください。あるいは、あなたは見ていないほうが幸せだろう。これは私が書いた最も悪い「sed」とは遠く離れていますが、ほとんどの人々の邪悪な考え方を超えることはあまりありません。 – geekosaur

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 
1

私は、これは '1行に' またはないとして適格かどうかわからないんだけど...

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

...これは1つのコマンドで、私は&(またはSCO Unixが使用するもの)で使用していたと思います...

+0

はい、これは無責任なsedとシェルのバージョンで最も固いsoluitonです。私は、私の友人が複数の行で単純に壊れているいくつかの奇妙なオートメーションのスーツでそれを必要とするので、1つのライナーを求めています。とにかく私は彼にawkの簡単な領域に入ると確信しました。ありがとうございました。 – MeaCulpa

+0

呼び出しを1行にする必要がある場合は、シェル関数で呼び出しをラップすることができます。彼はawkでどのような解決策を使用しましたか? –

関連する問題