Bashパイプ、ストリームコピー、各行で異なるコマンドを実行する

Bashパイプ、ストリームコピー、各行で異なるコマンドを実行する

出力の2行目で他のコマンドをどのように実行できますか?

たとえば、echo foo | sed pどのような出力がありますか?

foo
foo

sed 's/foo/bar/'私はそれらのいずれかを実行して取得したいと思います。

bar
foo

ベストアンサー1

存在する

$ echo foo | sed p
foo
foo

最初のものはfooコマンドによって印刷されp、2番目はパターンスペースがループの終わり(次の行を読む直前)に印刷される-nため、印刷されません。sed

fooだからそれを取得するにはbar

$ echo foo | sed 'p;s/foo/bar/'
foo
bar

または:

$ echo foo | sed -n 'p;s/foo/bar/p'
foo
bar

bar置換がある場合にのみ印刷します(s置換が成功した場合はフラグ付きコマンドで)。p

bar、を取得するには、元の元の行を取得し、foo交換h結果を印刷して復元します。

$ echo foo | sed 'h;s/foo/bar/p;g'
bar
foo

おすすめ記事