gpt4 book ai didi

regex - 为什么 `perl -i -p0e ` 有效,但 `perl -0 -pie ` 无效?

转载 作者:行者123 更新时间:2023-12-02 15:11:01 25 4
gpt4 key购买 nike

如果我尝试 perl -pie 's/foo/bar/' file.txt 它按预期工作:执行查找替换表达式,并将结果保存到原始文件中。

但是,如果我想使用 -0 来运行包含换行符的表达式,那么简单地在前面加上该选项是行不通的:

$ perl -0 -pie 's/foo\nbar/qux/' file.txt
Can't open perl script "s/foo\nbar/qux/": No such file or directory

经过多次尝试,以下组合奏效了:

$ perl -i -p0e 's/foo\nbar/qux/' file.txt

我的问题是:为什么选项的第一个顺序会产生错误(尤其是当普通 -pie 按预期工作时),而第二个顺序可以正确处理?

最佳答案

  • -i 表示无需备份就地工作。
  • -ie 表示就地工作,有备份。备份与原始文件同名,但附加了 e

这意味着 perl -pie 's/foo/bar/' file.txt 也不起作用(除非你有一个名为 s/foo/bar/)。

如果您简单地按逻辑排列选项,就可以避免问题。 -i 与程序无关——如果添加/删除它仍然可以工作——所以无论如何把它放在第一位更有意义。 -p-0777, otoh, 是程序的一部分,因此将它们放在 -e 旁边是有意义的。因此,明智地编写命令会导致以下结果之一:

perl -i  -0777pe'...' ...
perl -i~ -0777pe'...' ...
perl -0777pe'...' ...

请注意,我使用了 -0777,因为 -0 将输入视为以 NUL 终止的行,而不是激活 slurp 模式。

关于regex - 为什么 `perl -i -p0e <expression>` 有效,但 `perl -0 -pie <expression>` 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com