我有大量需要包含名称的文件
Jacqueline
但相反,它们包含以下内容:
Jacquelin
但有时也
fooJacquelinbar
或者
123Jacquelin123
或者
/Jacquelin/
如何用 替换每个实例Jacquelin
,Jacqueline
而不以类似的方式结束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' {} +
请记住事先备份,因为操作是不可逆的