我在使用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
但似乎无法正常工作..
答案 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
并使用>
重定向输出。