如何用sed捕获单个数字并替换另一位?替换命令失效求助
问题分析与修正
你第二次命令的错误点:
- 扩展正则捕获组语法错误:使用
-E参数时,sed的扩展正则中捕获组无需加转义符\(和\),直接写()即可。你额外添加了转义,导致sed把(和)当成普通字符匹配,根本找不到目标内容,替换自然不生效。 - 多余的无效匹配字符:正则里的
1是多余的,这会让sed去匹配(数字)1这种不存在的模式,和目标行内容完全不匹配。 - 匹配逻辑混乱:你想用
2指定替换第二个匹配项,但前面的正则写法错误,连基础匹配都做不到,更无法执行替换操作。
正确命令写法
要实现将匹配blabla的行中,中间两位数字的首位替换为3,可用以下命令:
cat test.txt | awk '/blabla/' | sed -E 's/([[:digit:]])([[:digit:]])/3\2/2'
命令说明:
([[:digit:]]):第一个捕获组匹配中间两位数字的第一位([[:digit:]]):第二个捕获组匹配中间两位数字的第二位3\2:替换为3加上第二个捕获组的内容(保留第二位数字,将第一位替换为3)2:指定替换该行中第二个匹配到的两位数字组合(对应示例里的40)
内容的提问来源于stack exchange,提问作者learning2code
相关产品推荐
相关产品推荐

