【问题标题】:regex and grep match only string with only single or double digit正则表达式和 grep 仅匹配只有一位数或两位数的字符串
【发布时间】:2011-07-31 15:18:36
【问题描述】:

我需要提取一个字符串,其中只有一位数或两位数。我的文件(测试)看起来像

test1correct
test12something
test123wrong

在上面的例子中,我只想 grep test1correct 和 test12something

我试过这个 grep "test[0-9]{1,2}" test 但它给了我所有 3 行。

【问题讨论】:

    标签: regex grep


    【解决方案1】:

    使用:grep "test[0-9]{1,2}[^0-9]"

    【讨论】:

    • 谁能解释一下这个正则表达式?
    • 解释:grep "^test[0-9]\{1,2\}[^0-9]" test.txt 可以在任何地方使用。基本上,您试图仅获取行的starting wordtest^test 的那些行(请参阅^ 字符,这意味着给定行的起点/字符),然后搜索数字@987654327 @(介于 0 到 9 之间,{} 之前的反斜杠是必需的)然后为避免使用 3 位数字,1 或 2 位数字之后的下一个字符可以是数字以外的任何字符,因此 [^0-9] 哪个表示,不是数字(当 ^ 在大括号 [] 中使用时)。
    【解决方案2】:

    使用lookaheads 和lookbehinds,您可以指定“正好一位”或“正好三位”或其他。这恰好是一位数:

    echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])'
    Result: 4
    

    它的作用是,找到一个前面没有数字,后面也没有数字的数字。也适用于超过一位数。这是三位数字,然后是其他任何数字中的至少一位,然后是一位:

    echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{3})(?![[:digit:]]).+(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])'
    Result: 123_4
    

    当我这样做时,grep 和 sed 的这种组合将找到一个包含三个数字的字符串,然后是一个或多个其他数字,然后是一个数字,并很好地提取这些部分。 (在 grep 中可能还有另一种方法可以做到这一点。)

    echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{3})(?![[:digit:]]).+(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])' | sed -r -e 's/[^[:digit:]]+/ /'
    Result: 123 4
    

    注意:grep 的 -P 标志意味着使用 Perl 风格的正则表达式,它允许您使用前瞻和后瞻。

    【讨论】:

      【解决方案3】:

      试试这个:

      test[0-9]{1,2}[A-Za-z]+
      

      【讨论】:

        【解决方案4】:

        cat tst--- tst 文件包含以下数据 1 0 操作员 4 5 5

        猫测试 | grep [0-9]--- 而我使用它的 grrp 只返回 1

        1

        如何 grep tst 文件中的所有数字?

        【讨论】:

        • 这并没有提供问题的答案。您可以search 询问类似问题,或参考页面右侧的相关和链接问题以找到答案。如果您有一个相关但不同的问题,ask 一个新问题,并包含指向此问题的链接以帮助提供上下文。请参阅:Ask questions, get answers, no distractions
        猜你喜欢
        • 2012-06-02
        • 2021-10-14
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2017-04-14
        • 1970-01-01
        相关资源
        最近更新 更多