변경 사항을 보고하는 명령줄 perl 명령 가져오기

변경 사항을 보고하는 명령줄 perl 명령 가져오기

나는 여러 파일에서 프로토콜을 제거하기 위해 다음 명령(Solaris에서)을 사용하고 있습니다.

find .  -name "*.txt"  -exec perl -pi  -e 's/http//g' '{}' \;

편집된 파일에 대한 보고서를 얻을 수 있도록 자세한 출력을 얻을 수 있는 방법이 있습니까?

고마워요, 앤디

답변1

다음을 사용하여 각 파일의 교체 횟수를 얻을 수 있습니다.

find . -type f -exec perl -pi -e '
    $count{$ARGV} += s/http//g;
    END {for (keys %count) {print "$_: $count{$_}\n" if $count{$_}}}' {} +

이 솔루션과 원래 솔루션에서는 perl교체 완료 여부에 관계없이 파일이 다시 작성됩니다.

명령을 ;종료하는 데 사용하지 마십시오 . 각 파일에 대해 하나의 Perl을 호출할 필요 없이 한 번에 여러 파일을 처리할 수 있습니다.-execperl

실제로 교체를 수행하지 않고 출력만 원하는 경우 위 명령에서 로 교체하면 됩니다 -pi.-n

다음과 같이 할 수도 있습니다.

find . -type f -exec grep -c http /dev/null {} +

카운트를 얻으려면철사포함합니다 http(발생 횟수와 반드시 동일할 필요는 없음 http).

답변2

-printPerl로 전송된 파일에 대한 보고서를 사용하고 얻을 수 있습니다 -exec.

find .  -name "*.txt" -print -exec perl -pi  -e 's/http//g' '{}' \;

어떤 파일이 수정되었는지 확인하려면 다음과 같이 하세요.

find .  -name "*.txt" \
    -exec perl -i.bak -pe 's/http//g' '{}' \; \
    -exec sh -c 'cmp -s "$1" "$1.bak" && echo "$1" || rm "$1.bak"' _ '{}' \;

관련 정보