Perl을 사용하여 구성 파일의 정규식을 대체하는 bash 스크립트가 있습니다. 누군가가 정규식을 사용하지 않아야 하는 conf 파일의 일부를 수동으로 수정한 경우 찾고 있는 줄이 존재하지 않거나 더 이상 정규식과 일치하지 않기 때문에 실패할 수 있습니다.
교체가 발생했는지 확인하기 위해 빠른 검사를 추가하고, 그렇지 않은 경우 약속된 구성을 수행할 수 없으며 conf 파일을 수동으로 업데이트해야 한다는 오류 메시지를 stdout에 작성하고 싶습니다.
Perl 명령을 실행할 때 성공적으로 무언가를 찾아서 바꾸는지 어떻게 확인합니까?
답변1
Perl에서는 예상 수량에 도달하지 못한 경우 교체 수량을 계산하여 실패로 표시할 수 있으며, 교체 수량을 유지해야 한다는 단점, 오탐 위험 등이 있습니다.
$ (echo cat; echo dog) \
| perl -ple '$s += s/cat/gato/; $s += s/dog/perro/;' \
-e 'END { die "incomplete sub" if $s != 2 }'
또는 대체된 데이터를 새 파일에 외부적으로 쓰고 newfile
원본 데이터와 다른지 확인합니다 file
.
perl ... file > newfile
cmp file newfile && echo >&2 "error unchanged"
이 형식의 단점은 다음 여부만 감지할 수 있다는 것입니다.아니요일부 교체가 실패할 때보다는 변경하십시오.