【发布时间】:2011-04-23 15:31:06
【问题描述】:
我在一些文件中有一些带有这种模式的字符串:
- domain.com/page-10
- domain.com/page-15 ....
我想用类似的东西替换它们
- domain.com/apple-10.html
- domain.com/apple-15.html
我发现我可以使用 sed 命令一次替换它们,但是因为在数字之后应该添加一些东西,我想我必须使用正则表达式来做到这一点。但我不知道怎么做。
【问题讨论】:
我在一些文件中有一些带有这种模式的字符串:
我想用类似的东西替换它们
我发现我可以使用 sed 命令一次替换它们,但是因为在数字之后应该添加一些东西,我想我必须使用正则表达式来做到这一点。但我不知道怎么做。
【问题讨论】:
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
【讨论】:
* 为零或更多。 + 是一个或多个。 [0-9] [0-9]* 应该更合适。
sed -i 's/page-\([0-9]*\)/apple-\1.html/' <filename>
([0-9]*)捕获一组数字;替换字符串引用中的\1 捕获并将其添加为替换字符串的一部分。
如果您需要保留文件的副本而不进行替换,您可能想要使用类似 -i.backup 的内容,或者只是省略 -i 并改用 I/O 重定向方法。
【讨论】:
解决问题的另一种方法:
sed -i.bak 's/\(^.*\)\(page-\)\(.*\)/\1apple-\3.html/' Files
这里使用引用(\1、\2、\3)存储和检索搜索模式。
【讨论】:
这会起作用
sed 's/$/\.html/g' file.txt
【讨论】: