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


9

我正在运行此:

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

在此处输入图片说明

Answers:


14

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

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


它涉及另外一个命令,但已交付。谢谢。
Ruslan Gerasimov 2014年

3

cat /dev/urandom|hexdumphexdump /dev/urandom连续写入标准输出,如果按Ctrl+,C此后将不执行任何操作。但是你可以用限制输出head

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

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


参与了另一项命令,但取得了不错的结果。谢谢。
Ruslan Gerasimov 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"错过
Ruslan Gerasimov 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.