正则表达式在sed中替换给定特定格式的URL的部分

时间:2012-04-05 11:04:19

标签: regex linux bash sed

我在使用sed做一个简单的正则表达式时遇到了一些问题。

我要在sql文件中做一些替换,我正在尝试使用sed。

我应该替换某些链接的网址。链接采用以下格式:

www。 site1 .com / blog / 2012/12/12

我想在所有链接中将 site1 替换为 site2

为了找到这些链接,我写了以下正则表达式:

(site1.com)\/blog\/\d{4}\/\d{2}\/\d{2}

似乎正好适当。

使用sed做替换的事情我写了以下代码

cat back.sql | sed 's:(site1.com)\/blog\/\d{4}\/\d{2}\/\d{2}:site2.com:' > fixed.sql

但似乎无法正常工作..

2 个答案:

答案 0 :(得分:5)

sed不支持\d(至少我不知道),仅支持{4}扩展正则表达式。

sed -r 's:site1.com(/blog/[0-9]{4}/[0-9]{2}/[0-9]{2}):site2.com/\1:'

作为基本正则表达式(需要大量转义):

sed 's:site1.com\(/blog/[0-9]\{4\}/[0-9]\{2\}/[0-9]\{2\}\):site2.com/\1:'

PS。如果使用不同的删除器(:

,则不需要转义斜杠

答案 1 :(得分:0)

看起来像是对我的直接替代:

$ sed -i s/\.site1\./\.site2\./g afile.txt

...其中afile.txt包含您的网站列表。

如果要输出到其他文件,请移除-i并使用>重定向输出。