【问题标题】:Perl substitution using string that contains a dollar sign on windows在 Windows 上使用包含美元符号的字符串进行 Perl 替换
【发布时间】:2011-01-22 22:50:23
【问题描述】:

我在 windows 上使用 perl,并尝试使用 perl 来替换文件中的占位符,该文件使用包含美元符号的 windows 变量。有谁知道正确的用法是使它与美元符号一起使用。我尝试了各种方法,但似乎无法使其正常工作。

例如,我有一个属性文件,其中包含一个令牌(!MYPASSWORD!),我试图替换它:

somevalue="!MYPASSWORD!"

我有一个批处理文件,它查找一个名为 NEWPASSWORD 的变量,其中包含密码 $abc12345$,我想使用 perl 替换来替换该值,如下所示。请注意,我可能并不总是知道 $ 符号在哪里,所以我无法逃脱它们。例如另一个密码可能是 abc$124$563:

echo %NEWPASSWORD%   <-- this would contain $abc12345$
perl -p -i.bak -e "s/!MYPASSWORD!/%NEWPASSWORD%/g" a.properties

完成后,我希望 a.properties 成为:

somevalue="$abc12345$"

提前致谢

【问题讨论】:

  • 我看不出您的实际问题是什么?你能举一个不工作的例子以及你想让它做什么吗?即提供代码
  • 以下是代码: echo %NEWPASSWORD%

标签: windows regex perl string


【解决方案1】:

使用' 作为正则表达式分隔符。它将禁用所有变量替换:

perl -p -i.bak -e "s'!MYPASSWORD!'%NEWPASSWORD%'g" a.properties

【讨论】:

  • 不错的 DWIMing,伊万。另一种方法是不让 shell 填写环境变量的值:s/!MYPASSWORD!/$ENV{NEWPASSWORD}/g
【解决方案2】:

我想您是从用户输入中获取密码的。既然您已经在使用 Perl,为什么不直接在 Perl 中执行此操作而不必通过批处理呢?它更容易。然后,您可以使用 Term::Inkey 之类的模块来屏蔽密码和其他内容。

【讨论】:

  • 你在开玩笑吧? Perl 的错误处理和流程控制无法胜任这项任务。像 DOS 批处理这样的重型语言更适合这样的任务。
  • 好吧,别开玩笑了,使用更强大的语言,比如 Perl,将使这类脚本更易于维护和重用。
  • 你一定是在开玩笑。 Perl 比批处理功能强大得多。在批量错误处理方面,你见过比 %errorlevel% 更好的吗?
猜你喜欢
  • 2020-10-12
  • 2016-02-13
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
相关资源
最近更新 更多