sed를 사용하여 여러 파일에서 문자열 찾기 및 바꾸기 [duplicate]

sed를 사용하여 여러 파일에서 문자열 찾기 및 바꾸기 [duplicate]

찾기 및 바꾸기를 위해 알려진 문자 집합이 포함된 파일 목록을 sed에 전달하려고 합니다.

여러 .xml 파일이 포함된 디렉터리의 경우:

ls -la

file1.xml
file2.xml
file3.xml

각각은 일치하는 문자열을 포함합니다.

grep -i foo *

file1.xml <foo/>
file2.xml <foo/>
file3.xml <foo/>

foo를 bar로 바꾸려면 for 루프를 사용하세요.

for f in *.xml; do ls | sed -i "s|foo|bar|g" ; done

반품:

sed: no input files
sed: no input files
sed: no input files

나는 효과적인 대안을 찾았으므로 이것은 대부분 내 자신의 영감을 위한 것입니다.

find /dir/ -name '*.xml' -exec sed -i "s|foo|bar|g" {} \;

답변1

루프에 결함이 있습니다 for. 명령 을 제거 ls하고 $f변수를 인수로 추가하면 sed -i각 변수가 내부에서 편집됩니다.filename.xml

for f in *.xml; do sed -i "s|foo|bar|g" "$f"; done

답변2

GNU sed에서는 여러 파일을 그 자리에서 편집할 수도 있습니다. 따라서 귀하의 작업은 다음과 같이 축소됩니다.

sed -i -se 's|foo|bar|g' *.xml

-s for --separatesed이를 수행하는 옵션 입니다 .

답변3

sed는 입력 경로를 인수로 기대합니다. 따라서 다음과 같이 구성해 보십시오.

 … | sed -i "…" /dev/stdin

(테스트되지 않음) 다음과 같은 이유로 파일을 매개변수로 사용하는 것이 더 쉬울 것입니다.

sed -i "..." *.xml

관련 정보