我试图写一个netcatstream到本地文件,但我也想用一些元数据(即连接的源IP)实时注释每个stream条目,因为我将使用多个stream将写入到相同的文件。
例如,以下(bash命令)工作正常:
nc 192.168.0.1 443 >> result.txt & echo -n "| Source: 192.168.0.1 | " >> result.txt
上面的代码的问题是它只会第一次input元数据。 所以输出如下所示:
Source: 192.168.0.1 | !* Connected! X Y Z
我希望书面结果如下所示:
Source: 192.168.0.1 | !* Connected! Source: 192.168.0.1 | X Source: 192.168.0.1 | Y Source: 192.168.0.1 | Z Source: 192.168.0.2 | A #<--Written From different netcat stream
不幸的是我不能运行一个脚本来在netcat完成它的工作之后添加元数据文本,因为我们需要一些方法来识别正在被写入的stream,因为多个stream将写入同一个文件。 主要是在bash或python中寻找解决scheme。
尝试sed(sream ed itor):
nc 192.168.0.1 443 | sed -u 's/^/Source: 192.168.0.1 | /g' >> results.txt
这应该取代每行的开始^
与文本Source: 192.168.0.1 |
我用tail -f some.file | sed -u 's/^/Source: 192.168.0.1 | /g'>t.txt
测试它 tail -f some.file | sed -u 's/^/Source: 192.168.0.1 | /g'>t.txt
tail -f some.file | sed -u 's/^/Source: 192.168.0.1 | /g'>t.txt
并得到:
Source: 192.168.0.1 | line one Source: 192.168.0.1 | line two Source: 192.168.0.1 | ... Source: 192.168.0.1 | line n
nb:-u标志是防止sed使用缓冲。 这个标志只支持linux下,而不是mac OSX。