gpt4 book ai didi

perl - 使用 powershell 中的 perl 就地编辑文件

转载 作者:行者123 更新时间:2023-12-02 23:48:11 26 4
gpt4 key购买 nike

我在一个目录中有一个文件 files.txt 的列表。我想通过每个文件运行文本替换。

$f = (get-content files.txt)
Foreach ($i in $f) { perl -pi -we "s/(\d{0,4})- /$1 - /g" $i }

但是 perl 不喜欢在没有备份的情况下这样做。

Can't do inplace edit without backup.



所以我将 .bak 添加到 -i:
$f = (get-content files.txt)
Foreach ($i in $f) { perl -pi.bak -we "s/(\d{0,4})- /$1 - /g" $i }

现在它提示:

Can't open perl script ".bak": No such file or directory



我错过了什么?

更新:

我更喜欢的是一种完全没有外壳的方法。我可以只用 $^I 在 perl 中执行此循环吗?不知何故?

最佳答案

my $qfn = 'files.txt';
open(my $fh, '<', $qfn)
or die("Can't open file list \"$qfn\": $!\n");

local @ARGV = <$fh>;
local $^I = '.bak';
local $_;
while (<>) {
s/(\d{0,4})- /$1 - /g;
print;
}
\d不使用/a 时匹配超过 0-9,所以你可能想要
 s/(\d{0,4})- /$1 - /ag;
-or-
s/([0-9]{0,4})- /$1 - /g;

请注意,上述内容并不能阻止 5 位数字按照您的需要进行匹配。为此,请使用:
 s/(?<![0-9])([0-9]{0,4})- /$1 - /g;

现在,当您知道 \K 时,没有理由将数字替换为自身。 .
 s/(?<![0-9])[0-9]{0,4}\K- / - /g;

最后,我们可以去掉重复的 -也。
 s/(?<![0-9])[0-9]{0,4}\K(?=- )/ /g;

关于perl - 使用 powershell 中的 perl 就地编辑文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10886743/

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