我需要在奇怪的字符串中检查用户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"
答案 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是您正在寻找的工具:
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