Bash 切口-d未按预期工作
我正在尝试解析终端中lsof实用程序的结果Bash 切口-d未按预期工作,bash,Bash,我正在尝试解析终端中lsof实用程序的结果 lsof -n -i | grep 192.168.0.105:58281 | cut -d" " -f2 输出不是返回以空格分隔的第二列,而是一条空行。 我缺少什么?cut将每个空格视为单独的标记。所以它打印第一列和第二列之间的空间 您也可以使用awk: lsof -n -i | grep 192.168.0.105:58281 | awk '{print $2}' cut将每个空格视为单独的标记。所以它打印第一列和第二列之间的空间 您也可以使用
lsof -n -i | grep 192.168.0.105:58281 | cut -d" " -f2
输出不是返回以空格分隔的第二列,而是一条空行。
我缺少什么?
cut
将每个空格视为单独的标记。所以它打印第一列和第二列之间的空间
您也可以使用awk
:
lsof -n -i | grep 192.168.0.105:58281 | awk '{print $2}'
cut
将每个空格视为单独的标记。所以它打印第一列和第二列之间的空间
您也可以使用awk
:
lsof -n -i | grep 192.168.0.105:58281 | awk '{print $2}'
lsof
的输出列由一个或多个空格分隔。因此,您需要“挤压”(-s
或-挤压重复
)它们,以便剪切
能够挑出列
这可以通过简单地将tr
添加到管道中来实现:
lsof -n -i |tr -s ' ' | grep ...
但是awk
可能是比cut
/tr
更好的解决方案,因为它能够更智能地解析字段。此外,您还可以使用Awk正则表达式消除grep
(它没有按照您的意思处理
,而没有\
-转义):
lsof -n -i | awk '/192\.168\.0\.105:58281/ {print $2}'
lsof
的输出列由一个或多个空格分隔。因此,您需要“挤压”(-s
或-挤压重复
)它们,以便剪切
能够挑出列
这可以通过简单地将tr
添加到管道中来实现:
lsof -n -i |tr -s ' ' | grep ...
但是awk
可能是比cut
/tr
更好的解决方案,因为它能够更智能地解析字段。此外,您还可以使用Awk正则表达式消除grep
(它没有按照您的意思处理
,而没有\
-转义):
lsof -n -i | awk '/192\.168\.0\.105:58281/ {print $2}'
代码中的缺陷是,
lsof
输出多个空格作为分隔符,cut
将所有这些空格视为不同的列。要实现您想要的,您可以使用
tr-s'
删除冗余空间。所以你可以用这样的东西:
lsof -n -i | grep 192.168.0.105:58281 | tr -s " " | cut -d" " -f2
代码中的缺陷是,
lsof
输出多个空格作为分隔符,cut
将所有这些空格视为不同的列。要实现您想要的,您可以使用
tr-s'
删除冗余空间。所以你可以用这样的东西:
lsof -n -i | grep 192.168.0.105:58281 | tr -s " " | cut -d" " -f2
-d
和之间不应该有空格吗?
?看看你想要的东西。不,空间里没有必要。你确定第一部分(lsof-n-i和grep)会返回什么吗?当我运行你的代码(使用调整后的grep)时,我确实得到了一些输出。我认为-f
和2
之间应该有一个空格。我发现-d
和之间不应该有空格吗?
?看看你想要的东西。不,空间里没有必要。你确定第一部分(lsof-n-i和grep)会返回什么吗?当我运行你的代码(使用调整后的grep)时,我确实得到了一些输出。我认为在-f
和2
之间应该有一个空格。我发现了一些东西