Regex 正则表达式来拉动部分字符串
我有一个作为数组读取的文本文件。我正在检查这个数组的每一行,并尝试在Perl脚本中提取该行的一部分,如果它与模式匹配的话Regex 正则表达式来拉动部分字符串,regex,perl,Regex,Perl,我有一个作为数组读取的文本文件。我正在检查这个数组的每一行,并尝试在Perl脚本中提取该行的一部分,如果它与模式匹配的话 --- Message '/com/java/deploy/mess1' on folder1 'f1' is running. Additional thread
---
Message '/com/java/deploy/mess1' on folder1 'f1' is running.
Additional thread instances: '0'
Deployed: '11/12/13 1:54 AM' in Jar file '/deploy/ENV/folder1/mess1ENV11122013.jar'
Last edited: '5/24/13 4:38 PM'.
Long description: ''
---
Message '/com/java/deploy/mess2' on folder1 'f1' is running.
Additional thread instances: '0'
Deployed: '11/12/13 1:54 AM' in Jar file '/deploy/ENV/folder1/mess2ENV11122013.jar'
Last edited: '5/24/13 4:38 PM'.
Long description: ''
----
Message '/com/java/deploy/mess3' on folder1 'f1' is running.
Additional thread instances: '0'
Deployed: '11/12/13 1:54 AM' in Jar file '/deploy/ENV/folder1/mess3ENV11122013.jar'
Last edited: '5/24/13 4:38 PM'.
Long description: ''
我正在搜索mess1并试图从上面的数组中提取jar信息
foreach $line (@messdetials) {
if ($line =~ mess1) {
next if /^(\s)*$/;
if (/in Jar file '(.*?)'/) {
@jardetails = `$displaycommand -b $1`;
print @jardetails;
}
我希望从数组中提取
/deploy/ENV/folder1/mess1.jar
,并对其运行内部脚本,但我没有看到任何输出。这将按照您的要求执行。它希望inpu文件的路径作为命令行上的参数,如下所示
perl findjar.pl /path/to/mylog.log
findjar.pl
use strict;
use warnings;
my $mess;
while (<>) {
if ( /^\s*Message\s*'([^']*)'/ ) {
$mess = $1;
}
elsif ( /in Jar file '([^']*)'/ ) {
print $1, "\n" if $mess and $mess eq 'mess1';
}
}
我能够通过使用以下代码片段实现这一点
if ($line=~/$flowname/){$flag=1;}
if($flag==1){
if ($line =~/in Jar file '([^']*)'/){
@jardetails = `$displaycommand -b $1`;
print @jardetails;
}
$flag=0;}
这对我有用。那么上面的每一行都是数组中的单个元素,还是每个块都是单个元素?(由--)分隔的块应该
if($line=~mess1){
beif($line=~/mess1/){
?注意,我添加了前斜杠。@bloodyKnuckles:这相当于同一件事。它没有抱怨,因为OP显然没有使用严格的和使用警告
@user3154754:我整理了你的代码,使其更具可读性。它有两个不匹配的大括号,因此无法编译。你没有这样做如果不是这样的话,那么在这里问一个问题来解决它是非常懒惰的。你还必须在你编写的每个Perl程序的顶部使用严格的和警告。@Hunter,我一直在看这个错误。我想我把每一行都当作数组中的一个元素来处理。但是我的脚本应该检查k如果行中有mess1、mess2或mess3,则获取对应mess的jar。(((?:/\w+)*?/mess1\.jar)
似乎是一个更简单的搜索,因为jar文件似乎是以搜索词命名的。@HunterMcMillen:我假设事实并非如此,否则程序中没有什么意义。它可以简化为print”/deploy/ENV/folder1/mess1.jar\n
很公平,认为值得一提。问题发布后没有反馈,很难说。我对原始帖子做了一点修改。jar文件并不是以搜索词命名的。我尝试了以下foreach$line(@messdetials){next if($line=~/$mess1/);if($line=~/在Bar文件“([^']*)”/){print“$1\n”@jardetails=
$displaycommand-b$1;print@jardetails;}
,但这不能将其保留到第一个块。它也将继续使用mess2和mess3 jar。
if ($line=~/$flowname/){$flag=1;}
if($flag==1){
if ($line =~/in Jar file '([^']*)'/){
@jardetails = `$displaycommand -b $1`;
print @jardetails;
}
$flag=0;}