perl - 在 Perl 搜索和替换中使用 ~

标签 perl replace

我想用用户输入生成的字符串替换目录下所有文件中的占位符。此输入可以包含 /: 。 〜

我选择 Perl 来完成这项任务。

perl -p -i -e "s/__MY_PLACEHOLDER__/$user_input/g" `find my_dir -type f -print0 | xargs -0`

现在,~ 是 Perl 中的保留字符。如何在 $user_input 中转义 ~\~ 不起作用。

最佳答案

实际上,~在双引号字符串字面量中并不特殊,例如s///的替换表达式。然而,其他一些是特殊的。在您列出的四个字符中,当 / 用作分隔符时,/ 是特殊的,就像这里的情况一样。


不要尝试从 shell 生成 Perl 代码!使用以下之一:

export $user_input
perl -i -pe's/__MY_PLACEHOLDER__/$ENV{user_input}/g'

USER_INPUT=$user_input perl -i -pe's/__MY_PLACEHOLDER__/$ENV{USER_INPUT}/g'

perl -i -pe'
   BEGIN { $user_input = shift }
   s/__MY_PLACEHOLDER__/$user_input/g
' "$user_input"

顺便说一句,你真的错过了xargs的重点!

perl ... `find my_dir -type f -print0 | xargs -0`

没什么不同
perl ... `find my_dir -type f`

你想要的是

find my_dir -type f -print0 | xargs -0 perl ...

这会将文件名原封不动地传递给 perl。如有必要,它甚至会使用不同批处理的参数多次调用 perl,以避免达到命令行长度限制。

关于perl - 在 Perl 搜索和替换中使用 ~,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168812/

相关文章:

eclipse - 如何格式化perl代码?

perl - 如何将汉字一一拆分?

perl - 如何使用 Perl 库函数将 UID 映射到用户名?

php - 使用 Perl 进行 UI 开发的最佳方法

perl - 如何使用 Perl 在 PDF 文档中搜索和替换?

Mysql - 更换麻烦

Javascript:用标签包装匹配的正则表达式

perl mockmodule fork

regex - Vim用另一个相同长度的单词列表替换单词列表?

c - 将数组的字符元素替换为用户输入输入的另一个字符