下面的命令不能正确捕捉16714
从16714 ssh -f -N -T -R3300:localhost:22
如何写的非捕获组的egrep
egrep -o '^[^ ]+(?= .*[R]3300:localhost:22)'
(但交换到的grep不,如果你使用-p标志。我期待的egrep能够处理这个)
下面的命令不能正确捕捉16714
从16714 ssh -f -N -T -R3300:localhost:22
如何写的非捕获组的egrep
egrep -o '^[^ ]+(?= .*[R]3300:localhost:22)'
(但交换到的grep不,如果你使用-p标志。我期待的egrep能够处理这个)
grep -P
强制grep使用Perl正则表达式引擎。
egrep
与grep -E
相同,它强制grep使用不支持lookahead的ERE(扩展正则表达式)引擎。
你可以找到的Perl和ERE(等)之间的差异的快速参考这里:http://www.greenend.org.uk/rjk/tech/regexp.html
要使用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
我不想让行的其余部分,只有PID。问题在于egrep,因为我显然误解了它的能力。 – AJP