perl - 使用perl替换文件第一行的问题

标签 perl io

我有一个看起来像这样的文件:

I,like
blah...

我只想用'i,am'替换第一行得到:

i,am
blah...

这些都是大文件,所以这就是我所做的 ( based on this ):

open(FH, "+< input.txt") or die "FAIL!";
my $header = <FH>;
chop($header);
$header =~ s/I,like/i,am/g;
seek FH, 0, 0; # go back to start of file
printf FH $header;
close FH;

但是,当我运行它时,我得到了这个:

i,amke
blah...

我看起来 like 中的 'ke' 还在那里。我该如何摆脱它?

最佳答案

我会做的大概是这样的:

perl -i -pe 'if ($. == 1) { s/.*/i,am/; }' yourfile.txt

当当前文件句柄 $. 的行计数器等于 1 时,这只会影响第一行。正则表达式将替换除换行符之外的所有内容。如果您需要它来匹配您的特定行,您可以将其包含在 if 语句中:

perl -i -pe 'if ($. == 1 and /^I,like$/) { s/.*/i,am/; }' yourfile.txt

您还可以查看 Tie::File ,这允许您将文件视为一个数组,这意味着您可以简单地执行 $line[0] = "i,am\n"。然而,有人提到此模块可能存在性能问题。

关于perl - 使用perl替换文件第一行的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176316/

相关文章:

c - C中的指针运算和读/写

c++ - ofstream - 需要在 close() 操作后删除对象句柄吗?

java - 你如何决定 InputStream.read() 使用什么字节 [] 大小?

perl - 使用 SWIG 在 Perl 中映射 STL

Perl 用户输入

regex - 当表达式中存在相似模式时,如何提取 perl 中最后一个实例的出现?

python - 我什么时候应该使用 file.read() 或 file.readlines()?

java.io.StreamCorruptedException : invalid stream header: 7371007E

c++ - 有没有办法从 pcrecpp 获取 PREMATCH ( $`) and POSTMATCH ($' )?

perl - 有没有办法使用 Perl 在 Windows 中检查管理员权限?