gpt4 book ai didi

regex - perl 替换多个文件中的字符串

转载 作者:行者123 更新时间:2023-12-01 11:18:07 24 4
gpt4 key购买 nike

我正在尝试替换多个文件中的字符串。但只有第一个文件被替换。代码是:

perl -pi -e 's/(^<section_begin>.*\s+$)/\1<expand>\n/ if $.==1' *exp`

grep -iw "expand" *exp
a3exp:<expand>

如果我对单个文件使用相同的命令,它会起作用:

perl -pi -e 's/(^<section_begin>.*\s+$)/\1<expand>\n/ if $.==1' n2exp
grep -iw "expand" *exp
a3exp:<expand>
n2exp:<expand>

你能帮我解决这个问题吗?

最佳答案

根据 perlvar :

$. is reset when the filehandle is closed, but not when an open filehandle is reopened without an intervening close().

Because "<>" never does an explicit close, line numbers increase across ARGV files (but see examples in eof).

(添加了第二个重点)

当您使用-p 时,@ARGV 被设置为您在命令行中传递的文件列表。由于 $. 在您转到下一个文件时不会重置,因此对于第一个文件它只会等于 1。您可以通过简单地打印 $. 来看到这一点:

$ echo foo > foo
$ echo bar > bar
$ perl -pe 'print "$. "' *
1 bar
2 foo

(使用-p 自动打印行,所以在上面的例子中,每行的内容打印在$. 的值旁边)

如果您在移动到下一个文件为 mpapec suggests关闭 特殊文件句柄 ARGV , $. 将按您的预期运行:

$ perl -pe 'print "$. "; close ARGV if eof' *
1 bar
1 foo

参见 documentation for eof了解更多详情和几个很好的例子。

关于regex - perl 替换多个文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407106/

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