Perl查找字符并在查找文本后添加第二行

Perl查找字符并在查找文本后添加第二行,perl,Perl,我正在尝试让这个脚本在两个find字符串中工作。我在获取文件以导出所需格式时遇到问题 use strict; my $find = '^(H0|HT)'; open (NEW, ">", "output.txt" ) or die "could not open:$!"; open (FILE, "<", "input.txt") or die "could not open:$!"; while (<FILE>) { chomp; if (/^\h{39

我正在尝试让这个脚本在两个find字符串中工作。我在获取文件以导出所需格式时遇到问题

use strict;

my $find = '^(H0|HT)';

open (NEW, ">", "output.txt" ) or die "could not open:$!";
open (FILE, "<", "input.txt") or die "could not open:$!";

while (<FILE>) {
    chomp;

if (/^\h{39}\XX187/){
    print NEW join(",","$_\n");
}

if (/$find/){
    print NEW join(",","$_")
}
}
close (FILE);
close (NEW);
输出文件期望值:

HT12345678  TEST, TESTNAME    01/01/16    XX187     CLAIM PROCESSED 01/01/16

你的问题很不精确,我很难理解你到底需要什么。然而,这个简短的程序可能会有所帮助

use strict;
use warnings 'all';

while ( <DATA> ) {
    print if /^(?:H[0T]|\s+XX187\b)/;
}


__DATA__
Account        Patient Name                                                         Date 
--------------------------------------------------------------------------------------------

HT12345678    TEST,TESTNAME                                                         01/01/16
                                  XX187         CLAIM PROCESSED                 01/01/16

这就是您正在运行的实际代码吗/^\h{39}\d/$find2/应该给出一个致命的语法错误。您的问题是什么?是的,我正在尝试找到XX187作为我的下一个添加行。我是否要添加其他内容,或者是否应该将其更改为我要查找的单词,例如/^\h{39}\d/XX187/??连接、$\n的作用是什么?您所需的输出中没有任何逗号,列表中只有一项,因此联接的结果仅为$\n您真的需要TEST、TESTNAME转换为TEST、TESTNAME吗?抱歉,由于报告中的个人信息,我对实际文件的详细信息非常有限。我要做的是复制以HT或H0开头的行,然后复制后面包含39个空格和单词XXX187的下一行,并将该行作为添加的行复制到包含HT或H0的行。希望这有点道理。@PhoenixJay:我的答案就是这样。如果我想利用$find,我该怎么写印刷品呢?打印if/^?:$find |\s+XX187\b/事实上,我是用$find使用它的。。非常感谢@Borodin
use strict;
use warnings 'all';

while ( <DATA> ) {
    print if /^(?:H[0T]|\s+XX187\b)/;
}


__DATA__
Account        Patient Name                                                         Date 
--------------------------------------------------------------------------------------------

HT12345678    TEST,TESTNAME                                                         01/01/16
                                  XX187         CLAIM PROCESSED                 01/01/16
HT12345678    TEST,TESTNAME                                                         01/01/16
                                  XX187         CLAIM PROCESSED                 01/01/16