加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何使用Perl替换运算符禁用变量插值?

发布时间:2020-12-14 02:29:56 所属栏目:百科 来源:网络整理
导读:我正在尝试替换VMS上的文本文件中的特定行.通常,这是一个简单的Perl单线程.但是当替换方是包含VMS路径的符号时,我遇到了问题.这是文件和我尝试的内容: file1.txt的内容: foobarbazquux 尝试替换第3行: $mysub = "disk$data1:[path.to]file.txt"$perl -pe
我正在尝试替换VMS上的文本文件中的特定行.通常,这是一个简单的Perl单线程.但是当替换方是包含VMS路径的符号时,我遇到了问题.这是文件和我尝试的内容:

file1.txt的内容:

foo
bar
baz
quux

尝试替换第3行:

$mysub = "disk$data1:[path.to]file.txt"
$perl -pe "s/baz/''mysub'/" file1.txt

产生以下输出:

foo
bar
disk:[path.to]file.txt
quux

看起来Perl过于苛刻,用一个不存在的变量的内容替换路径的$data1部分(即什么都没有).运行调试器确认了这一点.我没有提供/ e,所以我认为Perl应该直接替换文本.有没有办法让Perl这样做?

(另请注意,我可以在linux命令行中重现类似的行为.)

只需正确混合引号和双引号,您就可以到达:

我们创建了“string”’替换符号’“string”的紧密连接.
两个双引号字符串包含替换的单引号.
Contrived ……但它确实有效.

$perl -pe "s'baz'"'mysub'"'" file1.txt

这是一个DCL级别的解决方案.

对于Perl解决方案,使用q()运算符作为非插值字符串并执行它.
使用简单的DCL替换将符号填入parens.
这是我最喜欢的,因为它(几乎)对我有意义,并且不会引起混淆.

$perl -pe "s/baz/q(''mysub')/e" file1.txt

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读