コマンドパイピングgrepから出力をファイルにリダイレクトする


9

私はこれを実行しています:

cat /dev/urandom|hexdump| grep -i "ffff f" > random

そして、私はfile randomで何も得ません、コマンドが中断された後、それは長さゼロのままです。

出力をファイルに書き込む方法は?

結果をファイルに書き込む必要があります。ファイルには次のような出力データが含まれているはずです。

021bc40 7724 d4f5 59ec bcbb ffff fd26 ab3c 9b7c

03a9100 b3a5 8601 fa33 ffff f23c 4326 2e7f 0c8a

0449810 e459 d5af 4e11 ffff fc55 8660 9efb 3c9b

ここに画像の説明を入力してください

回答:


13

次の--line-bufferedオプションを使用しますgrep(また、不要なものを削除しますcat)。

hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random

このように、出力はバッファリングされませんが、すべての行がrandomすぐに入れられます。teeパイプで使用して、生成されたラインの数を確認することもお勧めします。

hexdump /dev/urandom | grep --line-buffered -i "ffff f" | tee random

3

ファイルがディスクに書き込まれる前にプロセスが中断されるため、ファイルは空です。これがリダイレクトの仕組みです。回避策として、これを試してください:

script -c 'cat /dev/urandom|hexdump|grep -i "ffff f"' -f random

これは基本的にすべての画面出力をファイルに書き込みます。


それはもう1つのコマンドを含みましたが、提供されました。ありがとうございました。
ルスランゲラシモフ2014年

3

cat /dev/urandom|hexdumpまたはhexdump /dev/urandomstdoutに継続的に書き込み、Ctrl+ を押してCも、この後は何も実行されません。しかし、あなたは出力を制限することができますhead

hexdump /dev/urandom | head -n1000000 | grep "ffff f" > random  

これはgrep、出力の最初の1000000行で行われ、結果をファイルに書き込みます。


もう1つのコマンドが関与しましたが、良い結果が得られました。ありがとうございました。
ルスランゲラシモフ2014年

1

cat /dev/urandom | hexdump実行前に、ファイルの出力をファイルに書き込む必要があります。以下のスクリプトは、あなたが試みていることを達成するはずです:

cat /dev/urandom | hexdump |
  while IFS= read -r line; do
    printf '%s\n' "$line" >> random;
  done

IFS ここで出力を行に分割するために使用されます。


(ソース)


grep "ffff f"ミス
ルスランゲラシモフ2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.