내 코드는 '바'와 '갑'의 모든 인스턴스를 대체 :xargs를 사용하여 찾기 및 바꾸기 sed - 결과를 파일에 저장할 수 있습니까?
find . -type f |
xargs grep 'foo' -l |
xargs sed -i 's|foo|bar|g'
내가 텍스트 문서에 수정 된 파일의 목록을 저장하고 싶습니다. 가능한가?
편집 :
이 나를 위해 일 최종 코드는 다음과 같습니다
find . -type f -print0 |
xargs -0 grep 'foo' -l |
tee result.txt |
xargs -0 sed -i 's|foo|bar|g'
이 가장 빠른 방법이지만, 수천이 다른 사이의 속도 차이를 파일인지 확실하지 제안 된 방법은 아마도 매우 작습니다.
왜 당신은 작은 부분 집합 타이밍 테스트하지 않습니다 - 일분 동안 실행 너무 작지 않은,하지만 어쩌면 뭔가를? 나는 당신의 데이터가 어떻게 든 비 전형적이지 않다면 너무 큰 차이를 기대하지 않을 것이다. 그러나 공백, 탭, 줄 바꿈 등을 포함하는 파일 이름으로 코드가 실패합니다. 파일에 이런 파일이 포함되어 있지 않습니까? –
여러분의 의견에 따라 위의 코드를'print0'과'-0'을 사용하여 수정했습니다. – Lewis
예. 그러나 xargs와 유사한 일괄 처리 방법을 사용하면 인수 크기가 명령 줄 제한을 초과 할 때 반드시 공백이나 비표준 문자 (print0)가 있거나 일괄 처리 대신 많은 프로세스 (exec)가 분기 될 위험이 있습니다. – cgseller