这个RegExp有什么问题?

时间:2012-04-20 08:30:42

标签: linux bash sed

我相信我没有做错任何事:

sed -e "s_//[01]\.thumbs\.4chan\.org/[a-z0-9]\+/src/\([0-9]\*\)s\.jpg_/${LOC}/\1s.jpg_g" -e "s_//images\.4chan\.org/[a-z0-9]\+/src/\([0-9]\*\)\.\(jpg\|gif\|png\)_/${LOC}/\1.\2_g" $LOC.html > a

有人可以告诉我为什么它不会将在线链接转换为离线链接吗?

2 个答案:

答案 0 :(得分:2)

我认为\*\+应该是*+?否则,它的字面意思是*+

答案 1 :(得分:1)

在简单的正则表达式模式下使用sed+必须像您一样转义为\+,并且"预期"星号*需要是asis,即。没有逃脱。这里有几个测试,使用\+*

如果您想在sed模式下简化extended regex的使用,请使用-r选项。您不需要逃离+() ....

echo '//0.thumbs.4chan.org/abc123/src/029s.jpg' |
    sed -n "\_//[01]\.thumbs\.4chan\.org/[a-z0-9]\+/src/\([0-9]*\)s\.jpg_p"

echo '//images.4chan.org/abc123/src/029.jpg' |
    sed -n "\_//images\.4chan\.org/[a-z0-9]\+/src/\([0-9]*\)\.\(jpg\|gif\|png\)_p"

输出:

//0.thumbs.4chan.org/abc123/src/029s.jpg
//images.4chan.org/abc123/src/029.jpg