명령줄에서 여러 파일 찾기 및 바꾸기
-
19-09-2019 - |
문제
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
제휴하지 않습니다 StackOverflow