我正在尝试解析终端中lsof实用程序的结果。
lsof -n -i | grep 192.168.0.105:58281 | cut -d" " -f2
输出是空行,而不是以间隔分隔返回第二列。 我错过了什么?
答案 0 :(得分:3)
代码中的缺陷是lsof
输出多个空格作为分隔符,cut
将所有这些空格视为不同的列。
要实现您的目标,您可以使用tr -s ' '
删除冗余空间。所以你可以使用这样的东西:
lsof -n -i | grep 192.168.0.105:58281 | tr -s " " | cut -d" " -f2
答案 1 :(得分:1)
$ python my_script.py
将每个空格视为单独的标记。因此它打印第1列和第2列之间的空间。
您可以使用cut
:
awk
答案 2 :(得分:1)
lsof
的输出列由一个或更多空格分隔。因此,您需要“挤压”它们(-s
或--squeeze-repeats
),以便cut
能够选出列。
只需在管道中添加tr
即可完成此操作:
lsof -n -i |tr -s ' ' | grep ...
但是awk
可能是比cut
/ tr
更好的解决方案,它能够更智能地解析字段。此外,您可以使用Awk正则表达式删除grep
(没有.
,而不是\
- 逃避):
lsof -n -i | awk '/192\.168\.0\.105:58281/ {print $2}'