문자열을 다른 문자열로 교체하거나 그 반대로 교체

문자열을 다른 문자열로 교체하거나 그 반대로 교체

다음과 같은 폴더 구조가 있습니다.

a/b/sample.txt
c/d/e/sample1.txt

샘플과 샘플 파일 모두 문장을 포함합니다.My name is Debojyoti

e/f/sample2.txt
g/h/i/sample3.txt

Sample2와 Sample3 파일 모두 문장을 포함합니다.My name is George

이제 나는 and George로 바꾸고 싶습니다 .DebojyotiDebojyotiGeorge

모든 UNIX 쉘 스크립트는 폴더 이름을 하드코딩하지 않고도 이 작업을 수행할 수 있습니다.

답변1

GNU 시스템에서는 다음을 수행할 수 있습니다.

grep -rlZ -e Debojyoti -e George . |
  xargs -r0 sed -i '
    s/Debojyoti/\n/g
    s/George/Debojyoti/g
    s/\n/George/g'

grep두 개의 NUL로 구분된 문자열 중 하나 이상이 포함된 파일을 나열합니다.

xargs목록을 sed -i내부 편집에 전달합니다.

sed한 번에 한 줄씩 파일을 처리합니다. 각 줄에 대해 모든 항목은 Debojyoti먼저 개행 문자로 대체됩니다(그렇지 않으면콘텐츠line)이면 George해당 항목이 로 대체됩니다 Debojyoti. 그런 다음 개행 문자(원래 s Debojyoti)가 로 대체됩니다 George.

GNU 외에도 다음을 sed사용할 수도 있습니다 perl.

perl -pi -e 's/(G)eorge|Debojyoti/$1 ? "Debojyoti" : "George"/ge'

관련 정보