我试图通过正则表达式使用grep从字符串中检索值,问题是如何在找到表达式后获取值。就像在这个例子中一样:
tcp6 0 0 :::80 :::* LISTEN 811/apache2
我可以简单地得到值80" [0-9] {2,}",问题是我也匹配过程的PID" 811",我怎样才能得到" :::"之后的数字? ?
答案 0 :(得分:0)
假设GNU grep:
$ s="tcp6 0 0 :::80 :::* LISTEN 811/apache2"
$ grep -oP ':::\K\d+' <<<"$s"
80
答案 1 :(得分:0)
关注awk
可能会对您有所帮助。
解决方案第一: 最简单的一个更改字段分隔到:::
和空格并看到魔法。
awk -F':::| +' '{print $5}' Input_file
解决方案第二: 仅在第四列中使用sub
。
awk '{sub(/:+/,"",$4);print $4}' Input_file
解决方案3: 使用match
awk
函数来匹配3个冒号和数字的正则表达式。
awk 'match($0,/:::[0-9]+/){print substr($0,RSTART+3,RLENGTH-3)}' Input_file
解决方案4: 在完整行中使用多个sub
来获得预期的输出。
awk '{sub(/[^:]*/,"");sub(/:::/,"");sub(/ +.*/,"");print}' Input_file
注意: 如果您使用的命令会显示输出,那么尽管使用了awk.... Input_file
,例如 - &gt; your_command | awk...
也适用于以上所有代码。