1

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

我必须在 sql 文件中进行一些替换,并且我正在尝试使用 sed。

我应该替换一些链接的 url。链接格式如下:

万维网。网站 1 .com /blog/2012/12/12

我想在所有链接中用site2替换site1 。

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

(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

但它似乎不起作用..

4

2 回答 2

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:'

附言。如果您使用不同的分隔符,则不需要转义斜杠 ( :)

于 2012-04-05T11:11:07.140 回答
0

看起来对我来说是一个直接的替代品:

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

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

如果要输出到另一个文件,请删除-i并使用 重定向输出>

于 2012-04-05T11:10:32.507 回答