Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex perl在bash内的两个模式之间找到一个模式_Regex_Perl_Bash_Sh - Fatal编程技术网

Regex perl在bash内的两个模式之间找到一个模式

Regex perl在bash内的两个模式之间找到一个模式,regex,perl,bash,sh,Regex,Perl,Bash,Sh,我正在bash文件(*.sh)中寻找使用perl的正则表达式。 我需要在两种模式之间找到一种动态模式 例如: some data . . . Pattern1 .. data Dynamic_Pattern ...data Pattern2 . . data . . Pattern1 ..data Pattern2 输出将是: Pattern1 .. data dynamic pattern ...data Pattern2 我在网上找到了以下代码: perl -n0e 'while (/

我正在bash文件(*.sh)中寻找使用perl的正则表达式。 我需要在两种模式之间找到一种动态模式

例如:

some data 
.
.
.
Pattern1
.. data
Dynamic_Pattern
...data
Pattern2
.
.
data
.
.
Pattern1
..data
Pattern2
输出将是:

Pattern1
.. data
dynamic pattern
...data
Pattern2
我在网上找到了以下代码:

perl -n0e 'while (/Pattern1.*?((?=Pattern2)|(?=$))/sg) {$x=$&;print $x if $x=~/$Dynamic_Pattern/}' file
问题是,如果Dynamic_Pattern id为Dynamic,则它不起作用,只有当它是static时,您必须将“Dynamic”部分作为参数传递给perl oneliner。否则,perl将其视为“his”变量,这当然是未定义的。您可以使用
-s
-switch(look)启用基本命令行参数。模式前的
\Q
应确保引用可能有问题的字符

perl -sn0e 'while (/Pattern1.*?((?=Pattern2)|(?=$))/sg) {$x=$&;print $x if $x=~/\Q$dynpattern/}' -- -dynpattern="$Dynamic_Pattern" file 

一个选项是向脚本传递两个参数。第一个是要搜索的动态模式,第二个是包含内容的文件。脚本将使用触发器来提取两个边缘图案之间的线条范围

赋值:

searched_pattern="Dynamic_Pattern"
然后运行
perl
脚本:

perl -ne '
    BEGIN { $pat = shift }
    if ( my $range = ( m/\A(?i)pattern1\b/ ... m/\A(?i)pattern2\b/ ) ) {
        $data .= $_;
        if ( ( q|E0| eq substr $range, -2 ) && ( $data =~ m/^\Q${pat}\E\b/m ) ) {
            printf qq|%s|, $data;
        }
        else {
            next;
        }
    }

    if ( $data ) { undef $data }
' "$searched_pattern" infile
它产生:

Pattern1
.. data
Dynamic_Pattern
...data
Pattern2

$Dynamic_Pattern
来自于调用bash脚本?是的,perl脚本在bash函数中,用于初始化Dynamic_Pattern
perl-n0e',而(/Pattern1.*(?=Pattern2)|(?=Pattern2)(?=Pattern2)//sg){$x=$&;如果$x=~/$Dynamic_Pattern/},则打印$x'file
我会双引号$Dynamic\u Pattern。是的,我只是想在前面放一个
\Q
。修复了开关的顺序,并在arg之前添加了
--
,但它似乎没有像预期的那样工作
perl-n0es',而(/Pattern1.*(?=Pattern1.=)(?=$)/sg{$x=$&;如果$x=~/\Q$dynamicKey/}打印$x'-dynamicKey=$enteredKey test.txt
我一直得到的替换模式没有在-e行1处终止。是的,这就是为什么我将顺序更改为
perl-sn0e
。。请从上面拿cmd。