如何在egrep中编写非捕获组

时间:2017-02-26 11:58:48

标签: grep

以下命令无法正确捕获16714

中的16714 ssh -f -N -T -R3300:localhost:22
egrep -o '^[^ ]+(?= .*[R]3300:localhost:22)'

(但是,如果使用-P标志,则交换为grep。我希望egrep能够处理此问题)

2 个答案:

答案 0 :(得分:1)

grep -P迫使grep使用Perl regexp引擎 egrepgrep -E相同,它强制grep使用不支持前瞻的ERE(扩展正则表达式)引擎。
您可以在此处找到Perl和ERE(以及其他)之间差异的快速参考:http://www.greenend.org.uk/rjk/tech/regexp.html

答案 1 :(得分:0)

要使用POSIX grep处理此问题,您可以使用grep隔离感兴趣的行,然后使用cut隔离感兴趣的字段:

$ echo "16714 ssh -f -N -T -R3300:localhost:22" | grep 'R3300:localhost:22' | cut -d' ' -f1
16714

或者,只需使用awk

$ echo "16714 ssh -f -N -T -R3300:localhost:22" | awk '/R3300:localhost:22/{print $1}'
16714