从命令管道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|hexdump或hexdump /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.