2017-02-26 35 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