削减-d没有按预期工作

时间:2015-07-26 19:41:40

标签: bash

我正在尝试解析终端中lsof实用程序的结果。

lsof -n -i | grep 192.168.0.105:58281 | cut -d" " -f2

输出是空行,而不是以间隔分隔返回第二列。 我错过了什么?

3 个答案:

答案 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}'