以下命令无法正确捕获16714
16714 ssh -f -N -T -R3300:localhost:22
egrep -o '^[^ ]+(?= .*[R]3300:localhost:22)'
(但是,如果使用-P标志,则交换为grep。我希望egrep能够处理此问题)
答案 0 :(得分:1)
grep -P
迫使grep使用Perl regexp引擎
egrep
与grep -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