4

自分のフレーバーに合わせて微調整された特定の文字列のみをキャプチャするために、標準入力をフィルタリングして置き換えようとしています。たとえば、標準の入力文字列は次のようになります。

"KB: the system ran into a critical error" 

次に、この行をgrepし、「KB:」を「###」に変更してから、次のようにSTDOUTに出力します。

"### the system ran into a critical error"

私はFedora12(そして実際には他の多くの人)で試しました

$ grep "KB:" - | sed -e 's/KB:/###/g'
KB: the system ran into a critical error <--- This is what I typed in manually.
                                         <--- Nothing is printed

同じサンプル文字列を含むテキストファイルtext.txtを作成し、次grepのようにファイルから読み取りました。

$ grep "KB:" text.txt | sed -e 's/KB:/###/g'
### the system ran into a critical error <--- Correctly displayed
$

の内部から見た違いgrep/sedと、STDINメソッドが機能しない理由は何ですか?使用などの代替案について聞くのではなく、xargsなぜ私の試みが失敗するのかを知りたいのです。

4

1 に答える 1