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"
この形式の欠点は、次のものしか検出できないことです。いいえ一部の交換が失敗した場合よりも変更してください。