使用bash脚本中的perl命令在多个文件中搜索和替换带有特殊字符的变量

Nic*_*ick 1 regex bash perl grep replace

尝试perl使用bash脚本中的命令在多个文件中搜索和替换密码变量和特殊字符.到目前为止,我有:

grep -rlF "${old_pass}" | xargs perl -p -e "s~\Q$old_pass~\E$new_pass~g"
Run Code Online (Sandbox Code Playgroud)

它适用于大多数情况,但有时会失败.例如,给定old_pass=*DGB9Twq7WTwz@wRnew_pass=tDx6U&ShRv}E3Mdb上面的命令导致tDx6U&ShRv}E3Mdb@wR而不是仅仅tDx6U&ShRv}E3Mdb.

请注意,密码是自动生成的,可以包含所有大写和小写字母,数字和所有特殊字符.因此,工作版本必须能够考虑(转义)所有可能的密码版本.

ike*_*ami 5

您尝试并且无法生成正确的Perl代码.但真正的问题是你首先尝试从shell生成Perl代码.在不使用STDIN或外部存储的情况下,有三种主要方法可以将信息传递给Perl.


顺便说一句,你应该进一步限制你的正则表达式模式匹配.就目前而言,你可能会有误报.(匹配错误的用户密码.匹配密码的一部分.匹配完全不是密码的东西.)