使用sed提取匹配字符串后两位时结果出现多余字符如何解决
问题原因分析
你原来的命令存在两个问题:
- 正则里的
te*语义是匹配t后面跟0个或多个e,不是匹配te后面的任意字符 - 替换规则只替换了匹配到的前缀部分,没有覆盖整行,所以行尾剩余的
line会原样保留,出现多余内容
修正后的命令
echo 'this is a test line' | sed -n 's/^.*te\(..\).*/te\1/p'
执行后输出结果为test,符合预期。
命令说明
-n参数:关闭sed默认输出全量行内容的逻辑,仅当匹配替换成功时才输出结果,避免无匹配时输出原行^.*te:从行首开始匹配任意字符,直到命中te字符串\(..\):正则分组语法,捕获te后面紧跟着的2个字符,存入编号为1的分组.*:匹配te加2个字符之后的所有剩余内容,保证整行都被替换,不会残留尾部内容te\1:将整行替换为te拼接分组1捕获到的2个字符p标记:替换成功后打印当前行内容
内容的提问来源于stack exchange,提问作者Will Roberts
相关产品推荐
相关产品推荐

