STDINで永続文字列を見つける方法

STDINで永続文字列を見つける方法

Bashを使用して、次のように/ dev / urandomから文字列をgrepしようとしています。

tr -cd '[:lower:]' < /dev/urandom | grep -o 'test'

また試しました:

tr -cd '[:lower:]' < /dev/urandom | grep -o 'test' | head -1

出力がファイルにリダイレクトされても、ファイルに何も書き込まれていないかのようにgrep待機が常に実行されるようです。tr> /tmp/testfile

headただし、以前に解析すると機能grepします。

tr -cd '[:lower:]' < /dev/urandom | head -c 10000 | grep -o 'test'

stdinの実行中に動作させる方法はありますか?そうでなければ、grep入力がまだ完了していない状態で出力を提供しない動作はなぜ起こりますか?

答え1

コメントで説明したように、grepプロセスライン:

これgrepユーティリティは入力ファイルを検索して、1つ以上のパターンに一致する行を選択する必要があります。

入力に改行が含まれていないため、引数でgrep指定されたパターンを確認するために行を無限に待ちます。

head -c 1000010,000文字以降の行を「終了」してこの問題を解決してください。別の解決策は、次のように入力で改行を許可することです。提案渡すモスビー:

tr -cd '[:lower:]\n' < /dev/urandom | grep -o 'test'

関連情報