我相信我没有做错任何事情:
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
有人能告诉我为什么它不会将在线链接转换为离线链接?
我认为\*
和\+
应该是*
和+
? 否则,它看起来字面上为*
和+
。
在简单的正则表达式模式下,像你一样, +
必须被转义为\+
,正如你所做的那样,而且“期望”星号*
必须是asis,即。 没有逃脱。 这里有几个测试,使用\+
和*
如果你想通过使用-r
选项来简化在extended regex
模式下使用sed
东西。 你不需要逃避+
, (
, )
….
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