仅替换嵌套在非数字旁边的字符串

时间:2019-05-22 09:26:54

标签: bash sed

我正在使用以下bash代码,使用sed将HTML文件中的所有“ 600”实例替换为“ 123”:

sed -i '' -e 's/'\"600\"'/'\"123\"'/' index.html

我想扩展搜索范围,使其不仅针对带引号的600实例,而且还针对任何非数字字符。

例如,将-600-,600,^ 600 ^作为目标,而将16001,-6001、1600-作为目标。

1 个答案:

答案 0 :(得分:1)

您可以使用组捕获前缀和后缀。 [^0-9]匹配非数字字符。

sed -i '' -E 's,([^0-9])600([^0-9]),\1123\2,g' index.html

示例:

a600a
^600^
16001
600

成为

a123a
^123^
16001
600

您还可以使用它来修复最后一行(600没有前缀/后缀):

sed -i '' -E 's,([^0-9]|^)600([^0-9]|$),\1123\2,g' index.html

结果:

a123a
^123^
16001
123