regex - Perl - 如何从文本文件中省略行?
问题描述
我有一个文本文件,我希望从文本文件中省略一些行,并使用该字符串创建一个新文件。好消息是我的文本文件以包含“START”并以“END”结尾的行开头我需要的文本块。
例如,我的文本文件如下所示:
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
推荐阅读
- mysql - 如何获取其中具有不同值的列的计数
- c++ - 使用不带括号的 C++ lambda 表达式
- java - 无法使用 VAO 和 VBO-LWJGL3 (OpenGL 3.3) 渲染三角形
- angular - 如何在 typescript 类中设置 svg 文件?
- excel - 我想将列数据转换为excel中的行。我有这样的数据
- autodesk-forge - 在伪造查看器中保存和检索
- javascript - 如何使用js代码检查页面中的所有单选框?
- python - 如何从列 pyspark 中获得第二高的值?
- android-studio - 滚动视图的 OnScrollChangeListener
- ssh - 如何连接到每个 ip 只接受单个连接的远程 ssh 服务器