【发布时间】:2010-05-23 02:09:05
【问题描述】:
我需要获取一个文件并找到第一次出现的文字字符串模式作为文件的完整行:
Acknowledgments:
然后我希望从匹配行一直到文件末尾创建一个新文件。
我希望 perl 是一个很好的方法,但我不是一个 perl 人,或者 sed 可能是一个好方法?
请提出一种在 Unix 中可靠地完成此任务的简单方法。
【问题讨论】:
标签: perl unix sed file-processing
我需要获取一个文件并找到第一次出现的文字字符串模式作为文件的完整行:
Acknowledgments:
然后我希望从匹配行一直到文件末尾创建一个新文件。
我希望 perl 是一个很好的方法,但我不是一个 perl 人,或者 sed 可能是一个好方法?
请提出一种在 Unix 中可靠地完成此任务的简单方法。
【问题讨论】:
标签: perl unix sed file-processing
这是使用 sed 的一种方法:
sed -n '/^Acknowledgements:$/,$p' input-file > output-file
-n 选项禁止将输入打印到输出。 /^Acknowledgements:$/,$ 部分是地址范围规范,表示从匹配正则表达式 ^Acknowledgements:$ 的行到文件末尾 ($),然后将这些行打印出来 (p) 到输出。
如果您希望输入文件和输出文件相同,您还需要指定-i 选项来告诉 sed 就地编辑。
【讨论】:
这是一个应该实现您所追求的脚本。
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
【讨论】: