나는 여러 파일에서 프로토콜을 제거하기 위해 다음 명령(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을 호출할 필요 없이 한 번에 여러 파일을 처리할 수 있습니다.-exec
perl
실제로 교체를 수행하지 않고 출력만 원하는 경우 위 명령에서 로 교체하면 됩니다 -pi
.-n
다음과 같이 할 수도 있습니다.
find . -type f -exec grep -c http /dev/null {} +
카운트를 얻으려면철사포함합니다 http
(발생 횟수와 반드시 동일할 필요는 없음 http
).
답변2
-print
Perl로 전송된 파일에 대한 보고서를 사용하고 얻을 수 있습니다 -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"' _ '{}' \;