如何在文件中搜索模式并从匹配点到文件末尾获取新文件?

时间:2010-05-22 15:55:15

标签: perl unix sed file-processing

我需要获取一个文件并找到第一次出现的文字字符串模式作为文件的完整一行:

Acknowledgments:

然后我希望从匹配行一直到文件末尾创建一个新文件。

我希望perl是一个很好的方法,但我不是一个perl人,或者也许sed是一个好方法?

请提出一种在Unix中可靠地完成此操作的简单方法。

2 个答案:

答案 0 :(得分:5)

以下是使用sed执行此操作的一种方法:

sed -n '/^Acknowledgements:$/,$p' input-file > output-file

-n选项禁止打印输出到输出。 /^Acknowledgements:$/,$部分是一个地址范围规范,表示要匹配从正则表达式^Acknowledgements:$到文件末尾($)的行,然后将这些行打印出来(p)到输出。

如果您希望输入文件和输出文件相同,则还需要指定-i选项以告知sed进行就地编辑。

答案 1 :(得分:3)

的Perl

这是一个应该实现您目标的脚本。

use strict;
use warnings;

open my $input,  '<', 'inputFile.txt';   # Open handle to input file 
open my $output, '>', 'output.txt';      # Open handle to output file

while (<$input>) {

    next if /^Acknowledgments:$/ .. 0;

    chomp $_;
    print $output $_,"\n";
}

close $input;
close $output;

下面是等效的Perl单线:

perl -ne 'print if /^Acknowledgments$/ .. 0' inputFile > outputFile