用于替换字符串中的数字的正则表达式

时间:2017-09-05 06:49:06

标签: regex bash sed

我有一个字符串" AAAAAAA02"我想用" AAAAAAA01"替换它。即只是数字。 我尝试过以下无效的sed命令:

sed -e "s|AAAAAAA\\d+$|AAAAAAA01|g;" 
sed -E "s|(AAAAAAA.+)\d+|AAAAAAA01|g;"
sed -E "s|(AAAAAAA.+)\\d+|AAAAAAA01|g;"
sed -E "s|AAAAAAA(\\d+)|AAAAAAAD01|g;"

基本上我需要一个正则表达式,但如果有人能用sed命令帮我,那就太棒了。!!

编辑: 我知道这可以替换为硬编码值01/02。但是文件中有很多行,我想要一般地替换它。 我需要一个RegEx来清理它。

1 个答案:

答案 0 :(得分:1)

必须删除最后的;\d应更改为[0-9]。如果在正则表达式中使用了一个组,为什么不在替换部​​分中使用反向引用?

使用

s='AAAAAAA02'
echo $s | sed -E "s|(A{7})[0-9]+|\101|g"

查看online demo

-E选项启用POSIX ERE语法(无需转义(...)来创建捕获组,无需转义+{...}量词。)< / p>

模式匹配:

  • (A{7}) - 第1组:七A s
  • [0-9]+ - 一个或多个数字

替换插入组1中的内容(\1)并将01添加到值中。

注意:如果A...<digits>必须与整个单词匹配,请使用单词边界\b,对模式进行舍入(sed -E "s|\b(A{7})[0-9]+\b|\101|g")。