我正在尝试在其值参数扩展到多行的行上进行模式匹配。我的输入文件看起来像
$ npm install cookie-parser -g
脚本输出:: config -type cc -opt“XX”-value {“A”\
我希望我的print命令返回整个配置行,而不是将其返回到“A”。看起来当前的模式匹配命令还不够。
config -type "cc" -opt "XX" -value { "A" \
"B" \
"C" }\ -default "A" \
-text "\tA: XX size = 1/1\
\tB : XX size = 1/10\
\tC : XX size = 1/100" -active dev
and the script to read the file is
#!/usr/bin/env perl
use strict();
use warnings();
use Cwd;
my $custom=$ARGV[0];
##pattern matching
open(my $fNew, "< $custom") or die "cannot open $!";
while(<$fNew>) {
##Pattern matching
if( $_ =~ m/^\s*config\s+-type\s+([^\s+]+)\s+-opt\s+\"([^\"]+)\".*/gi ) {
##print the pattern
print "$_\n";
}
}
答案 0 :(得分:2)
我没有意识到输入文件及其格式中所有可能的数据块组合。如果我误解了,请告诉我。
考虑您的文件有格式:
someblock1 -option1 value -option2 value
someblock2 -option1 value -option2 value
...
config -option1 value -option2 value
...
someblockN -option1 value -option2 value
您希望使用多行模式获取所有config
- 块到标量变量。由于此块可能包含换行符。
这是一些没有循环的任务代码:
use strict;
use warnings;
open my $fh, '<file' or die "$!\n"; my $file = join '', <$fh>; close $fh;
$file =~ /config.*?-value\s?\{.*?"(\w)"\s*\}.*?\1\s?:.*?(?:\n|$)/s;
print $&;
此模式将与D : XX size = 1/100" -active dev
选项中指向的-value{...}
之类的描述匹配。 (当然,如果您在生成文件时遵循某些顺序)
答案 1 :(得分:0)