Как выполнить поиск файла по шаблону и получить новый файл от точки совпадения до конца файла?

Мне нужно взять файл и найти первое вхождение строчного шаблона в виде полной строки файла:

Acknowledgments:

И затем я хочу создать новый файл от строки соответствия до конца файла.

Я ожидаю, что perl - хороший способ сделать это, но я не очень люблю perl, в качестве альтернативы, может быть, sed - хороший способ?

Пожалуйста, предложите простой способ надежно выполнить это в Unix.


person WilliamKF    schedule 22.05.2010    source источник


Ответы (2)


Вот один из способов сделать это с помощью sed:

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

Опция -n подавляет вывод ввода на вывод. Часть /^Acknowledgements:$/,$ — это спецификация диапазона адресов, в которой говорится, что нужно сопоставить строку, соответствующую регулярному выражению ^Acknowledgements:$, до конца файла ($), а затем вывести эти строки (p) на вывод.

Если вы хотите, чтобы входной файл и выходной файл были одинаковыми, вам также необходимо указать параметр -i, чтобы указать sed редактировать на месте.

person Adam Rosenfield    schedule 22.05.2010

Перл

Вот сценарий, который должен достичь того, что вам нужно.

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
person Zaid    schedule 22.05.2010
comment
Этот оператор триггера плохой. - person Zaid; 22.05.2010
comment
Пожалуйста, отредактируйте, чтобы я мог проголосовать за, я случайно отменил, и теперь я не могу проголосовать повторно. - person WilliamKF; 22.05.2010