将命令管道 grep 的输出重定向到文件

将命令管道 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

在此处输入图片描述

答案1

使用--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

答案2

您的文件为空,因为在将文件写入磁盘之前,进程被中断。这就是重定向的工作原理。作为解决方法,请尝试以下操作:

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

这基本上会将所有屏幕输出写入文件。

答案3

cat /dev/urandom|hexdumphexdump /dev/urandom连续写入 stdout,如果按Ctrl+,C则此后不会执行任何操作。但你可以使用以下命令限制输出head

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

这将grep在输出的前 1000000 行中将结果写入文件。

答案4

您需要cat /dev/urandom | hexdump在下次执行之前将输出写入文件。以下脚本应该可以完成您要执行的操作:

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

IFS用于将输出拆分成行。


(来源)

相关内容