我有一个字符串" 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来清理它。
答案 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"
)。