下面的命令不能正確捕捉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