我相信我在这方面没有做错:
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
有人能告诉我为什么它不能将在线链接转换为离线链接吗?
我认为\*
和\+
应该是*
和+
?否则,它会按字面意思查找*
and +
。
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