【问题标题】:How to display part of matched pattern in grep?如何在 grep 中显示部分匹配模式?
【发布时间】:2014-04-08 20:21:00
【问题描述】:

我想从像“abc_12_1”这样的文本中提取 12。我正在尝试这样

echo "abc_12_1" | grep -Eo '[a-zA-Z]+_[0-9]+_1'
abc_12_1

但我无法选择字符串中第一个 _ 之后的数字,上述命令的输出是整个字符串。我正在寻找 grep 中的一些替代方法,我在遵循 Perl 模式匹配时使用了这些替代方法。

perl -e '"abc_55_1" =~ m/[a-zA-Z]+_([0-9]+)_1/ ; print $1'
55

grep 可以吗?

【问题讨论】:

    标签: regex perl grep


    【解决方案1】:

    使用perl

    $ echo "abc_12_1" | perl -lne 'print /_(\d+)_/'
    12
    

    grep:

    $ echo "abc_12_1" | grep -oP '(?<=_)\d+(?=_)'
    12
    

    【讨论】:

    • 回声 "_12_1" | grep -oP '(?).*?(?=_)' 即使这给出了 put 12. 在这种情况下我不想匹配,你能告诉如何在从你的表情开始
    • @Renjith 试试echo "_12_1" | grep -oP '(?&lt;=[[:alpha:]]_)(\d+)(?=_)'
    【解决方案2】:

    你可以使用cut:

    cut -d_ -f2 <<< "abc_12_1"
    

    使用grep

    grep -oP '(?<=_).*?(?=_)' <<< "abc_12_1"
    

    两者都会产生12

    【讨论】:

      【解决方案3】:

      一种方法是使用awk

      echo "abc_12_1" | awk -F_ '{print $2}'
      12
      

      grep

      echo "abc_12_1" | grep -o "[0-9][0-9]"
      12
      

      grep 与扩展正则表达式一起使用

      grep -oE "[0-9]{2}"     # Get only hits with two digits
      grep -oE "[0-9]{2,}"    # Get hits with two or more digits
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        相关资源
        最近更新 更多