我有一个 bash 脚本,它使用 perl 替换配置文件中的正则表达式。如果有人手动修改了 conf 文件的部分内容,他们不应该使用正则表达式,则可能会失败,因为它正在查找的行不存在或不再与正则表达式匹配。
我想添加一个快速检查以查看是否发生替换,如果没有发生,则向标准输出写入一些错误消息,告诉他们我们无法执行承诺的配置,他们需要手动更新conf文件。
当我运行 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"
这种形式的缺点是它只能检测是否不进行更改,而不是在某些替换失败时进行。