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

hd.*_*hd. 0 regex sed

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

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

我想用类似的东西替换它们

  • domain.com/apple-10.html
  • domain.com/apple-15.html

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

gho*_*g74 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
Run Code Online (Sandbox Code Playgroud)

除了sed,你也可以使用gawk's gensub()

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


Amb*_*ber 5

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

所述([0-9]*) 捕获的一组数字; 在\1替换字符串中的引用捕获并将它作为替换字符串的一部分.

您可能希望使用类似的东西,-i.backup如果您需要保留文件的副本而不进行替换,或者只是省略-i而是使用I/O重定向方法.