我有一个文本文件,我想从文本文件中省略一些行,并使用该字符串创建一个新文件。好消息是我的文本文件以包含“START”并以“END”结尾的行开始我需要的文本 block 。
例如,我的文本文件如下所示:
1
2
3
Start
4
5
6
End
7
8
Start
9
10
End
所需的输出将是两个字符串,我可以将它们输出到如下所示的文本文件中:
Start
4
5
6
End
Start
9
10
End
我目前拥有的:
open(RH, '<', $fileName) or die $!;
while(<RH>) {
#print $_;
chomp $_;
if ($_ eq 'START') {
$str = "$str"."$_\n";
}
}
但我不确定如何继续。
编辑: 我用以下方法回答了这个问题:
$cmd = q(awk '/Start/,/End/ {print}' foo.txt);
my $output = qx($cmd);
my @cards = split (/(?<=\End)/, $output);
最佳答案
您可以使用 AWK 中的一些 Perl 继承并执行此操作(假设您的文件名为 foo.txt)
perl -ne'print if /Start/../End/' foo.txt
表达式 /Start/../End/
表示“在匹配 /Start/
的第一行到匹配 /End 的下一行/
。
awk 的等效代码是
awk '/Start/,/End/ {print}' foo.txt
https://stackoverflow.com/questions/66770674/
相关文章:
go - Helm : How to convert a string into lower/upp
javascript - 不要将数字或单词替换为下划线,而是保留破折号并删除其周围的空格
haskell - 合并两个 Either Monad 的结果
user-interface - 在 TreeView Odoo 13 之外添加按钮
django - 如何从 drf-spectacular API 文档中删除 RetrieveUpd
rust - 关于位复制的 Copy 特性是否仅从堆栈复制?
rust - 为什么 Rust 元组不使用方括号访问里面的元素?