为什么 sed 替换所有出现的位置而不是仅替换第一个出现的位置?

为什么 sed 替换所有出现的位置而不是仅替换第一个出现的位置?

我正在尝试使用以下命令替换文件中的第一个匹配项sed

sed -i s/he/He/ dummy.txt

它不是替换第一个出现的位置,而是替换所有出现的位置,即使没有/g.

根据文档,它应该仅替换第一个。

版本sed是:

GNU sed version 4.1.5

我错过了什么吗?或者不同的实现的行为是否不同sed

答案1

sed 逐行处理输入。修饰符/g会影响它是替换一行中所有出现的内容,还是仅替换第一个:

echo hehe | sed s/h/H/
echo hehe | sed s/h/H/g

要仅替换文件中的第一个匹配项,请使用如下所示的内容:

s/h/H/            # Replace.
ta                # Go to a if s/// worked.
b                 # Otherwise, start the next cycle.
:a { n            # Process the next line.
     ba           # Go to a.
}

相关内容