使用sed在匹配后替换一定数量的字符

时间:2016-08-02 17:18:52

标签: bash sed

我的文件test.txt看起来像这样:

something=1something-else=234another-something=5678

我想将something-else=234替换为something-else=***,但我唯一的信息是"匹配"那是something-else=并且在等号后面正好有三个字符。目前我有这个命令替换匹配后的所有内容:

sed -i -e 's/\(something-else=\).*/\1***/' test.txt

结果:something=1something-else=***

如何使其适应仅替换三个字符而不是整行的其余部分?

2 个答案:

答案 0 :(得分:4)

您正在寻找

sed -i -e 's/\(something-else=\).\{3\}/\1***/' test.txt

或等同地

sed -i -e 's/\(something-else=\).../\1***/' test.txt

答案 1 :(得分:1)

  

如何使其适应仅替换三个字符而不是整行的其余部分?

您可以使用:

sed 's/\(something-else=\).../\1***/' file

something=1something-else=***another-something=5678

此处...将在something-else=之后恰好匹配3个字符。

您还可以使用量词编号:

sed -E 's/(something-else=).{3}/\1***/' file