删除文件中某些部分的方法或者只能逐行删除?(Perl脚本)

时间:2017-10-10 09:24:47

标签: perl

我有一个文件包含很多部分,但我想删除除A部分以外的所有部分。 例如:

Section A 
abcdefg

Section B
hijklmn

Section C
opqrstu

可以编写任何Perl脚本来删除B和C中的所有内容吗?

3 个答案:

答案 0 :(得分:1)

您可以使用段落模式按部分读取文件,然后只使用正则表达式匹配来验证要保留的部分名称。

perl -00 -ne 'print if /^Section A/' -- file

答案 1 :(得分:0)

@Choroba确实为你提供了一个内容,所以这是一个脚本版本

use strict;
use warnings;

local $/ = "";
open(my $in_fh, "<", "inputfile.txt") or die "unable to open inputfile.txt: $!";
open(my $out_fh, ">", "outputfile.txt") or die "unable to open outputfile.txt: $!";
while ( <$in_fh> ) {
    print $out_fh $_ if /^Section A/;
}

close $in_fh;
close $out_fh;

这将打开文件inputfile.txt并以段落模式阅读,找到Section A并纯粹打印Section A作为文件outputfile.txt

的段落

给出结果

Section A
abcdefg

答案 2 :(得分:0)

我一直认为这样的程序如果坚持使用Unix过滤器模型就会更有用 - 即他们从STDIN读取并写入STDOUT

#!/usr/bin/perl

use strict;
use warnings;

local $/ = ''; # paragraph mode

while (<>) {
  print if /^Section A/;
}