我正在尝试将netcat流写入本地文件,但我还希望使用一些元数据(即连接的源IP)实时注释每个流条目,因为我将使用多个流将写入同一个文件。
例如,以下(bash命令)工作正常:
nc 192.168.0.1 443 >> result.txt & echo -n "| Source: 192.168.0.1 | " >> result.txt
上面代码的问题是它只会在第一次输入元数据。所以输出看起来像这样:
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完成它的工作后,我无法运行脚本来添加元数据文本,因为我需要一些方法来识别正在编写的流,因为多个流将写入同一个文件。主要在bash或python中寻找解决方案。
答案 0 :(得分:1)
尝试sed( s tream 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
测试了它并得到了:
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。