sed 将缺少一个字母的单词替换为完整单词

sed 将缺少一个字母的单词替换为完整单词

我有大量需要包含名称的文件

Jacqueline

但相反,它们包含以下内容:

Jacquelin

但有时也

fooJacquelinbar或者

123Jacquelin123或者

/Jacquelin/

如何用 替换每个实例JacquelinJacqueline而不以类似的方式结束Jacquelinee

我尝试过的是:

find . -name '*' -type f -exec sed -i 's/\bJacquelin\b/Jacqueline/g' {} +

但这不会替换附加任何内容的实例"Jacquelin"(与整个单词不匹配)。

答案1

也试试

sed  's/\(Jacquelin\)e\?/\1e/g' file

或者

sed -r 's/(Jacquelin)e?/\1e/g' file

答案2

我建议使用 Perl 来利用负向预测

perl -pe 's/Jacquelin(?!e)/Jacqueline/g'

它将替换当Jacquelin后面没有紧跟该字符时e(包括如果后面没有字符)

要就地批量编辑文件,您可以添加-i标志:

find . -name '*' -type f -exec perl -pi -e 's/Jacquelin(?!e)/Jacqueline/g' {} +

请记住事先备份,因为操作是不可逆的

相关内容