我已经进行了搜索和搜索,但没有任何功能完全符合我的需要。
到目前为止,我的脚本正在做所有事情;输入文本文件,这是一行长的字符。该脚本要求用户输入第一个输入,然后输入第二个输入。我试图让脚本删除第一个输入之前和第二个输入之后的所有字符。我不想删除匹配的输入本身。
e.g。如果文件包含" 1111111111111111111111111CAT1111DOG11111111111",则用户键入" CAT"第一次输入和" DOG"对于第二个输入,我想完成" CAT1111DOG"。
我不需要输入和输出等方面的帮助。它只是使用我的$line
字符串。如何在第一个输入变量之前和第二个输入变量之后删除所有内容,但不删除这些匹配项?也许是正则表达式解决方案?顺便提一下,在文件中找到的输入变量可能并不总是相同的长度。
答案 0 :(得分:1)
您可以按照以下方式执行此操作:
$one = $ARGV[0] || "CAT" ;
$two = $ARGV[1] || "DOG" ;
$str = $ARGV[2] || '1111111111111111111111111CAT1111DOG11111111111';
$abc;
# This version will capture the match to a new variable
if ($str =~ m/($one.*$two)/) {
print "$1\n";
$abc = $1;
}
# This version will replace the original string with the match
$str =~ s/.*($one.*$two).*/$1/;
print "$abc\n$str\n";
如果保存文件,则可以输入位置参数作为用户输入。
答案 1 :(得分:0)
这可以满足您的期望。
use warnings;
use strict;
my @data = <DATA>;
print "Enter ther first value: ";
chomp (my $first =<>) ;
print "Enter the second value: ";
chomp (my $sec = <>);
my @ar =map{m/$first.*$sec/gi} @data; #simply do it
print "@ar\n";
__DATA__
1111111111111111111111111CAT1111DOG11111111111
我使用map
函数来匹配数据开始和结束。 .
这匹配任何期望换行的内容,然后*
匹配零次或多次。