在字符串bash脚本中查找4个数字

时间:2014-06-17 21:45:40

标签: bash

我需要在奇怪的字符串中检查用户ID。我只想要拥有它的线条。如何在以下示例字符串中连续检查4个整数?

    "111/S/H0110//Jake, Greenfield ServiceRequest/bin/ksh"
    "740/S/H5155//Jake, Greenfield/bin/ksh"
    "90/S/Customer  /usr/bin/ksh"
    "740/S///Jake, Greenfield/bin/ksh"

在这些例子中,我希望这些行能够通过:

    111/S/H0110//Jake, Greenfield ServiceRequest/bin/ksh
    740/S/H5155//Jake, Greenfield/bin/ksh

而不是通过这些:

    90/S/Customer  /usr/bin/ksh
    740/S///Jake, Greenfield/bin/ksh

奖金问题

ID可以是,

    [A-Z][A-Z][0-9][0-9][0-9][0-9]
    [0-9][0-9][0-9][0-9][0-9][0-9]
    [A-Z]-[0-9][0-9][0-9][0-9]

意思是,例如:

    7A7777
    AA7777
    A77777
    A-7777

(虽然我愿意和#34;只是"在字符串中找到" 7777"

4 个答案:

答案 0 :(得分:2)

下面的解决方案假设每一行都是一个条目,每个条目都由正斜杠(/)字符分隔的字段组成。

awk -F/ '$3~/[[:digit:]]{4}$/' filename

Awk非常有效率。

答案 1 :(得分:1)

如评论中所示,这可以做到:

grep -E '[A-Z]{2}[0-9]{4}|[A-Z]{2}[0-9]{4}|[A-Z]-[0-9]{4}'
         ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
                (1)              (2)             (3)

符合要求:

[A-Z][A-Z][0-9][0-9][0-9][0-9] --> [A-Z]{2}[0-9]{4}   (1)
[0-9][0-9][0-9][0-9][0-9][0-9] --> [0-9]{6}           (2)
[A-Z]-[0-9][0-9][0-9][0-9]     --> [A-Z]-[0-9]{4}     (3)

答案 2 :(得分:0)

是您正在寻找的工具:

grep '[0-9]\{4\}'

答案 3 :(得分:0)

此awk命令检查ID包含字母数字组合。如果它在那里,那么它打印然后相应的行。

$ awk -F/ '$3~/[A-Z-]*[0-9][A-Z0-9]*/ {print}' file
    "111/S/H0110//Jake, Greenfield ServiceRequest/bin/ksh"
    "740/S/H5155//Jake, Greenfield/bin/ksh"

如果您只想要ID字段中的数字,请尝试使用此命令,

$ awk -F/ '$3~/[A-Z-]*[0-9][A-Z0-9]*/ { gsub (/[A-Z-]/,"",$3); print $3}' file
0110
5155