如何在sed命令中使用正则表达式

时间:2010-10-11 04:47:40

标签: regex sed

我在某些文件中有这种模式的字符串:

  • domain.com/page-10
  • domain.com/page-15 ....

我希望用

之类的东西替换它们
  • domain.com/apple-10.html
  • domain.com/apple-15.html

我发现我可以使用sed命令一次替换它们但是因为在数字之后应该添加一些内容我想我必须使用正则表达式来做到这一点。但我不知道怎么做。

4 个答案:

答案 0 :(得分:6)

sed -i.bak -r 's/page-([0-9]+)/apple-\1.html/' file

sed  's/page-\([0-9][0-9]*\)/apple-\1.html/' file > t && mv t file

除了sed,您还可以使用gawk的gensub()

awk '{b=gensub(/page-([0-9]+)/,"apple-\\1.html","g",$0) ;print b  }' file

答案 1 :(得分:5)

sed -i 's/page-\([0-9]*\)/apple-\1.html/' <filename>

([0-9]*) 捕获一组数字;替换字符串中的\1引用捕获并将其作为替换字符串的一部分添加。

如果您需要在没有替换的情况下保留文件的副本,或者只是省略-i而不是使用I / O重定向方法,则可能需要使用类似-i.backup的内容。

答案 2 :(得分:0)

解决问题的另一种方法:

sed -i.bak 's/\(^.*\)\(page-\)\(.*\)/\1apple-\3.html/' Files

此处使用引用(\1\2\3)存储和检索搜索模式。

答案 3 :(得分:-1)

这将有效

sed 's/$/\.html/g' file.txt