web-dev-qa-db-ja.com

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

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

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

ファイル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

enter image description here

9

grep--line-bufferedオプションを使用します(また、役に立たないcatを取り除きます):

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

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

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

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

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

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

3
Jos

cat /dev/urandom|hexdumpまたはhexdump /dev/urandomは、stdoutに継続的に書き込みます。 Ctrl+C この後は何も実行されません。ただし、headを使用して出力を制限できます

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

これにより、出力の最初の1000000行でgrepが実行され、結果がファイルに書き込まれます。

3
TuKsn

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

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

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


(ソース)

1
jobin