我正在尝试使用以下命令替换文件中的第一个匹配项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.
}