使用Perl仅替换文件的特定行中的字符串

bne*_*her 5 bash perl edit

我有一个用于大规模查找和替换的脚本。在特定文件中找到匹配项时,我记录文件名和行号。

我想要做的是为每个文件名,行号对,串从改变<foo><bar>仅该行的文件。

在我的Shell脚本中,我在给定行号的情况下在文件上执行查找和替换命令...

run=`perl -pi -e "s/$find/$replace/ if $. = $lineNum" $file`
Run Code Online (Sandbox Code Playgroud)

但是,我认为这一直忽略了整个文件,$. = $lineNum而只是这样做了s/$find/$replace/,这确实很糟糕。

有什么想法可以做到吗?

Jon*_*ler 6

您正在使用分配=而不是比较==

使用:

perl -pi -e "s/$find/$replace/ if $. == $lineNum" $file
Run Code Online (Sandbox Code Playgroud)

关于的内容有一些警告$find$replace并且$lineNum可能不会成为问题。注意事项是$find不能包含斜线的问题;$replace也不能包含斜线;$lineNum必须是行号;当心其他多余的多余字符,可能会使代码混乱。

我不明白为什么您要在Perl进程写入文件而不是标准输出时捕获其标准输出。因此,分配给run是不可行的。如果有必要,你很可能会关闭使用更好的run=$(perl …)$()到位的符号`…`