2017-02-26 41 views
0

下面的命令不能正确捕捉1671416714 ssh -f -N -T -R3300:localhost:22如何写的非捕获组的egrep

egrep -o '^[^ ]+(?= .*[R]3300:localhost:22)' 

(但交换到的grep不,如果你使用-p标志。我期待的egrep能够处理这个)

+0

我不想让行的其余部分,只有PID。问题在于egrep,因为我显然误解了它的能力。 – AJP

回答

1

grep -P强制grep使用Perl正则表达式引擎。
egrepgrep -E相同,它强制grep使用不支持lookahead的ERE(扩展正则表达式)引擎。
你可以找到的Perl和ERE(等)之间的差异的快速参考这里:http://www.greenend.org.uk/rjk/tech/regexp.html

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