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

问题描述 投票:0回答:4

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

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

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

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

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

regex sed
4个回答
7
投票
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

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

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

如果您需要保留文件的副本而不进行替换,您可能需要使用类似

-i.backup
的内容,或者只是省略 -i 并使用 I/O 重定向方法。


0
投票

解决问题的另一种方法:

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

这里使用引用存储和检索搜索模式(

\1
\2
\3
)。


-2
投票

这会起作用

sed 's/$/\.html/g' file.txt
© www.soinside.com 2019 - 2024. All rights reserved.