문제

Unix의 여러 파일에서 명령줄의 문자열을 어떻게 찾고 바꾸나요?

도움이 되었습니까?

해결책

여러 가지 방법이 있지만 답 중 하나는 다음과 같습니다.

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'

다른 팁

좀비 솔루션과 비슷하지만(아마도 더 빠르다고 생각합니다) sed (많은 배포판과 OSX의 표준) Perl 대신:

find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'

이것은 모두를 대체합니다 현재 디렉토리 아래의 Python 파일에서 발생 술집 다음을 사용하여 각 파일에 대한 백업을 만듭니다. .py.bak 확대.

.bak 파일을 제거하려면:

find . -name "*.bak" -delete

나는 항상 그렇게했다 에드 스크립트 또는 전 스크립트.

for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof

그만큼 전- 명령은 단지 : vi의 라인 모드입니다.

공간이있는 이름 또는 디렉토리로 찾기 및 sed를 사용하여 다음을 사용합니다.

find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'

최근 Bash Shell을 사용하면 디렉토리를 가로 질러 이동할 필요가 없다고 가정합니다.

for file in *.txt
do
while read -r line
do
    echo ${line//find/replace} > temp        
done <"file"
mv temp "$file"
done 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top