我正在运行这个:
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|hexdump
或hexdump /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
用于将输出拆分成行。