다음과 같은 폴더 구조가 있습니다.
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
로 바꾸고 싶습니다 .Debojyoti
Debojyoti
George
모든 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'