如果 bash 脚本中的 perl 命令未能执行替换,则写入警告

如果 bash 脚本中的 perl 命令未能执行替换,则写入警告

我有一个 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"

这种形式的缺点是它只能检测是否进行更改,而不是在某些替换失败时进行。

相关内容