yan*_*kel 1 perl file-handling
我想读取一个输入文件,然后删除一行,如果它匹配我的正则表达式.并保存文件没有该行.
我已经写了
open(my $fh, '<:encoding(UTF-8)', $original_file_path or die "Could not open file $original_file_path $!";
while (my $line = <$fh> ) {
chomp $line;
if ($line ~=/myregex/){
delete line from file
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
您可以修改一个文件的地方使用-i标志.
在您的情况下,一个简单的一个班轮将做:
perl -i -ne 'print unless /myregex/' the_name_of_your_file
Run Code Online (Sandbox Code Playgroud)
如PerlDuck所述,如果您希望保留原始文件的副本,则可以:在-i标志之后添加扩展名,如-i.bak或-i~,然后原始文件将在其名称后保留此扩展名.
您可以在perlrun上找到有关就地文件修改的更多信息.
请注意,如果您使用的是Windows(MS-DOS),则需要为备份文件指定一个扩展名,以后可以自由删除.看到这个链接.
您可以通过设置$^I为不同的值来在脚本中获取相同的行为undef.例如:
#!/usr/bin/perl
use strict;
use warnings 'all';
{
local @ARGV = ( $original_file_path );
local $^I = ''; # or set it to something else if you want to keep a backup
while (<>) {
print unless /myregex/
}
}
Run Code Online (Sandbox Code Playgroud)
我已经习惯了local @ARGV,如果你已经有了东西@ARGV,它不会造成任何麻烦.如果@ARGV是空的,那push @ARGV, $original_file_path也没关系.
但是,如果您在脚本中有更多的事情要做,您可能更喜欢完整的脚本而不是单行.在这种情况下,您应该读取输入文件,并将要保留的行打印到另一个文件,然后move将第二个文件打印到第一个文件.
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |