gawk
의 -i inplace
옵션 을 사용하여 인쇄 할 수도 stdout
있습니까?
예를 들어, 파일을 업데이트하고 싶거나 변경 사항이 있으면 파일 이름과 변경된 줄을 인쇄하면 stderr
다음과 같은 작업을 수행 할 수 있습니다
find -type f -name 'myfiles' -exec gawk -i inplace '{if(gsub(/pat/, "repl")) { print FILENAME > "/proc/self/fd/2" ; print > "/proc/self/fd/2"; } print;}' {} +
stdout
대신 대신 사용 하거나 다른 스트림에 해당 블록을 인쇄하는 더 깨끗한 방법이 있습니까?
grep
할 수 있는지 잊어 버린다 . 내 첫 번째 본능은 파일을 두 번 "처리"하지 않아도되는 것이지만 그럼에도 불구하고 실제로 더 빠르더라도 놀라지 않을 것입니다. 그것은 단지 내가 프로파일 링 작업에 내 직감을 믿을 수있는 이유를 보여 간다
-print -exec gawk
것이 없으면 파일을 한 번만 처리하고 ( 더 이상이 실행되지 않는 부분 ) 2) 첫 번째 일치에서 중지하므로 첫 번째 일치가 마지막 줄은 여전히 전체 파일을 두 번 처리하지 않습니다 (1.X 배와 비슷합니다). 또한, 만약 gawk -i inplace
같은 작품 sed -i
어쨌든 현재 위치에서 파일을 편집합니다 - 즉, 업데이트 타임 스탬프를 ... 편집에 아무것도 아이 노드 등이 없었다하더라도
find -type f -name 'myfiles' -exec grep -q 'pattern' {} \; -print -exec gawk -i inplace '{do_your_sub_and_print_to_dev/stderr_too}' {} \;
그런 식으로 무언가를 실행하고 싶을 것입니다. awk를 사용하여 실제로 그 패턴과 일치하는 줄을 포함하는 파일을 편집 할 것입니다.