如何在给定输出中的“/”之前提取值

时间:2016-12-07 07:50:18

标签: linux shell

命令:

.text()

输出:

netstat -anp | grep -i 8009 | awk '{print $7;}' 

期望的输出:

9345/java

我想只提取进程ID,即9345。 我还可以在命令中添加什么来获得所需的输出?

5 个答案:

答案 0 :(得分:0)

使用cut

echo "9345/java" | cut -d '/' -f 1
#Output: 9345

把它们放在一起:

netstat -anp | grep -i 8009 | awk '{print $7;}' | cut -d '/' -f 1

答案 1 :(得分:0)

awk与定义的分隔符一起使用 -

netstat -anp | grep -i 8009 | awk '{print $7;}' | awk -F/ '{print $1}' 

或者稍微清理一下,

netstat -anp | awk '/8009/ {print $7;}' | awk -F/ '{print $1}'

答案 2 :(得分:0)

做另一个grep

netstat -anp | grep -i 8009 | awk '{print $7;}' | grep --regexp="\d+[^\/]"

正则表达式解释:

\d+匹配一个或多个数字
[^\/]排除字符'/'

答案 3 :(得分:0)

您可以使用sub并提供一个正则表达式,用空字符串替换每个非数字字符,从而产生仅数字输出。修改你的代码:

netstat -anp | grep -i 8009 | awk '{sub("[^0-9]+", ""); print $1}'

答案 4 :(得分:0)

为什么要在一个命令中同时使用awkgrep

仅使用awk

netstat -anp |awk -v port="40759" '$0 ~ port {split($7,a,"/");print a[1]}'
25873

或仅使用grep

netstat -anp  |grep -oP '31805\s+\K.*(?=/)'