gpt4 book ai didi

perl - 如何提取两个字符串之间的行

转载 作者:行者123 更新时间:2023-12-03 09:26:34 25 4
gpt4 key购买 nike

我是 Perl 的绝对初学者,我试图在不同行的 2 个字符串之间提取文本行,但没有成功。看起来我的代码中遗漏了一些东西。该代码应该打印出文件名和找到的字符串。您知道问题出在哪里吗?非常感谢您的帮助或建议。这是示例:

*****************
example:
START
new line 1
new line 2
new line 3
END
*****************

和我的脚本:

use strict;
use warnings;

my $command0 = "";
opendir (DIR, "C:/Users/input/") or die "$!";
my @files = readdir DIR;
close DIR;
splice (@files,0,2);

open(MYOUTFILE, ">>output/output.txt");
foreach my $file (@files) {
open (CHECKBOOK, "input/$file")|| die "$!";
while ($record = <CHECKBOOK>) {
if (/\bstart\..\/bend\b/) {
print MYOUTFILE "$file;$_\n";
}
}
close(CHECKBOOK);
$command0 = "";
}
close(MYOUTFILE);

最佳答案

我想您正在尝试在这里使用触发器,这可能适合您的输入,但您写错了:

if (/\bstart\..\/bend\b/) {

触发器(范围运算符)使用两个语句,由 ..... 分隔。您想要的是两个用 .. 连接的正则表达式:

if (/\bSTART\b/ .. /\bEND\b/) 

当然,你也想匹配大小写(大写),或者使用/i修饰符忽略大小写。您甚至可能想使用行首 anchor ^ 来仅匹配行的开头,例如:

if (/^START\b/ .. /^END\b/)

您还应该知道,您的整个程序可以用单行代码替换,例如

perl -ne 'print if /^START\b/ .. /^END\b/' input/*

唉,这只适用于 Linux。 Windows 中的 cmd shell 不支持 glob,因此您必须手动执行此操作:

perl -ne "BEGIN { @ARGV = map glob, @ARGV }; print if /^START\b/ .. /^END\b/" input/*

如果无论您做什么,整个文件打印都遇到问题,我认为问题出在您的输入文件上。因此,花点时间研究它并确保它是您所认为的,例如:

perl -MData::Dumper -e"$Data::Dumper::Useqq = 1; print Dumper $_;" file.txt

关于perl - 如何提取两个字符串之间的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19929195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com