作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经常用
perl -pi -w -e 's/search/replace/g;' [filelist]
在 [filelist] 的所有文件中用“replace”替换“search”的每个出现。不幸的是,所有文件似乎都有更新的时间戳。即使文件中没有出现“搜索”。我可以用一种简单的方法改变它吗?
最佳答案
-i
是松散的:
rename($ARGV, "$ARGV$^I") or die $! if length $^I;
open(*ARGV, '<', "$ARGV$^I") or die $!;
open(*STDOUT, '>', $ARGV) or die $!;
如您所见,它总是立即替换现有文件。这是所有打印 (-p
) 发送输出的地方。
两种选择:
使用临时文件。
perl -e'
$temp_qfn = "temp";
open(my $fh_out, ">", $temp_qfn) or die $!;
my $save;
while (<>) {
$save = 1 if s/search/replace/g;
print($fh_out $_);
} continue {
if (eof) { # Not eof()!
close($fh_out);
rename($temp_qfn, $ARGV) if $save;
$save = 0;
open(my $fh_out, ">", $temp_qfn) or die $!;
}
}
close($fh_out);
unlink($temp_qfn);
' file ...
将整个文件加载到内存中。
perl -0777ne'
if (s/search/replace/g) {
open(my $fh_out, ">", $ARGV) or die $!;
print($fh_out $_);
}
' file ...
(以上两者都有各种可解决的错误处理问题。-i
也有一些相同的问题。)
关于perl - 在进行搜索时保留时间戳,并使用 perl 替换多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400616/
我是一名优秀的程序员,十分优秀!