【问题标题】:perl find a pattern between two patterns inside bashperl在bash内部的两个模式之间找到一个模式
【发布时间】:2013-08-24 02:20:07
【问题描述】:

我正在寻找一个在 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_Pattern 来自调用 bash-script?
  • 是的,perl 脚本位于一个 bash 函数中,该函数初始化 Dynamic_Pattern perl -n0e 'while (/Pattern1.*?((?=Pattern2)|(?=$))/sg) {$x=$&;print $x if $x=~/$Dynamic_Pattern/}' file

标签: regex perl bash sh


【解决方案1】:

您必须将“动态”部分作为参数传递给 perl-oneliner。否则 perl 将其视为“他的”变量,这当然是未定义的。您可以使用-s-switch 启用基本命令行参数(查看here)。模式前的\Q 应确保引用可能有问题的字符。

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

【讨论】:

  • 我要双引号 $Dynamic_Pattern。
  • 是的,只是想在前面放一个\Q
  • 修正了开关的顺序,并在 arg 之前添加了 --,但它似乎没有按预期工作
  • perl -n0es 'while (/Pattern1.*?((?=Pattern1)|(?=$))/sg){$x=$&;print $x if $x =~/\Q$dynamicKey/}' -dynamicKey=$enteredKey test.txt 我不断得到替换模式未在 -e 第 1 行终止。
  • 是的,这就是为什么我将订单更改为 perl -sn0e.. 请从上方获取 cmd。
【解决方案2】:

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

评估价值:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2019-09-14
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多