通过grep regex

时间:2018-06-04 20:52:40

标签: regex shell grep

我试图通过正则表达式使用grep从字符串中检索值,问题是如何在找到表达式后获取值。就像在这个例子中一样:

tcp6   0    0   :::80   :::*     LISTEN     811/apache2

我可以简单地得到值80" [0-9] {2,}",问题是我也匹配过程的PID" 811",我怎样才能得到" :::"之后的数字? ?

2 个答案:

答案 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...也适用于以上所有代码。