egrep命令用于具有一个或多个1234实例但没有其他数字的行?

时间:2015-09-24 21:23:00

标签: regex linux bash shell

所以我对正则表达式相当新,我想知道如何将它作为egrep命令实现。

我基本上想在文件中查找具有一个或多个" 1234"实例的行,但没有其他数字。 (允许使用非数字字符。)

示例:

1234 - 有效

12341234 - 有效

12345 - 无效(因为有5)

3 个答案:

答案 0 :(得分:1)

您可以使用grep提取包含1234的行,然后将1234替换为输入中未显示的内容,然后删除仍包含任何数字的行,并按1234替换特殊字符串:

< input-file grep 1234 \
    | sed 's/1234/\x1/g' \
    | grep -v '[0-9]' \
    | sed 's/\x1/1234/g'

答案 1 :(得分:1)

因此,我们要选择1234次或多次但没有其他数字的行:

grep -E '^([^[:digit:]]*1234)+[^[:digit:]]*$' file

如何运作

正则表达式以^开头,以$结尾。这意味着必须匹配整行。

正则表达式内部分为两部分:

  1. ([^[:digit:]]*1234)+匹配一个或多个1234而没有其他数字。

  2. [^[:digit:]]*匹配上一个1234后面的任何非数字。

  3. 在过去,人们会使用[0-9]来匹配数字。使用unicode,这不再可靠。因此,我们使用[:digit:],这是unicode安全的。

    实施例

    让我们使用这个测试文件:

    $ cat file
    this 1234 is valid
    12341234 valid
    not valid 12345
    not 2 valid 1234 line
    no numbers so not valid
    

    结果如下:

    $ grep -E '^([^[:digit:]]*1234)+[^[:digit:]]*$' file
    this 1234 is valid
    12341234 valid
    

答案 2 :(得分:0)

如果您在1234阻止后不想要其他数字:

egrep '\<(1234)+(\>|[^0-9])' *

       --        --                --> word delimiters
          ----                     --> the word you're looking for
                    ------         --> non digit characters
               -                   --> one or more times

如果您只想要“1234”块组成的“单词”,那么您可以这样:

egrep '\<(1234)+\>' *

       --       --  --> word delimiters
          ----      --> the word you're looking for
               -    --> one or more times.