찾기 및 바꾸기를 위해 알려진 문자 집합이 포함된 파일 목록을 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 --separate
sed
이를 수행하는 옵션 입니다 .
답변3
sed는 입력 경로를 인수로 기대합니다. 따라서 다음과 같이 구성해 보십시오.
… | sed -i "…" /dev/stdin
(테스트되지 않음) 다음과 같은 이유로 파일을 매개변수로 사용하는 것이 더 쉬울 것입니다.
sed -i "..." *.xml