来自grep和sed的不同匹配结果

时间:2015-02-08 06:13:40

标签: regex bash shell sed grep

我正在使用以下正则表达式来匹配github repo路径:     :/ 但是,我从grepsed获得了不同的匹配结果:

$ sed -nr 's|[:/]([^/]+/[^/]+)$|\1|' <<< 'https://github.com/myuser/myrepo'

$ sed -nr '/[:\/]([^\/]+\/[^\/]+)$/p' <<< 'https://github.com/myuser/myrepo'  

$ grep -Eo '[:/]([^/]+/[^/]+)$' <<< 'https://github.com/myuser/myrepo'
/myuser/myrepo

这两个命令的结果不应该是等价的(除sed省略前导[:/])吗?

grep:grep(BSD grep)2.5.1-FreeBSD
sed:sed(GNU sed)4.2.2
操作系统:Mac OSX 10.9.5

1 个答案:

答案 0 :(得分:1)

如果您想要与sed命令等效grep,请使用:

sed -r 's#^.*([:/][^/]+\/[^/]+)$#\1#' <<< 'https://github.com/myuser/myrepo'
/myuser/myrepo