sed는 한 문자가 누락된 단어를 완전한 단어로 대체합니다.

sed는 한 문자가 누락된 단어를 완전한 단어로 대체합니다.

이름을 포함해야 하는 파일이 너무 많습니다.

Jacqueline

그러나 그 대신 다음 내용이 포함되어 있습니다.

Jacquelin

하지만 가끔은

fooJacquelinbar또는

123Jacquelin123또는

/Jacquelin/

유사하게 끝나지 않고 Jacquelin모든 인스턴스를 어떻게 바꿀 수 있습니까 ?JacquelineJacquelinee

내가 시도한 것은 다음과 같습니다.

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' {} +

작업은 되돌릴 수 없으므로 사전에 백업해 두십시오.

관련 정보