使用下面的示例,我试图找出regex
我的awk program
.
- 输出只能是长度不超过 5 的数字:IG15251
- 输出只能包含两个字母, 5 和“O”之前和之后的
"H" & "O"
任何数字都是可选的:=< 3
=<
IGHO722 或 799H89090 输出可以不是包括任何有空格或除数字之外的任何单词:IGHKKS kjsla aaa --> 不可接受
猫文件名
00ISM00123 189902 078HP890201 HO90902 123H7292 234HO7027 12345556 GV18029039 kslal HOsjlk jj 123 687iOu7900
我尝试了以下脚本
awk '$1~/^[0-9]{,3}([hH][oO]?)[^a-zA-Z]/' filename`
但不要覆盖文件名中的数字 IE
> 189902
> 12345556
当我尝试以下脚本时,输出仍然不正确!
awk '$1~/^([0-9]{,3}([hH][oO]?)?)[^a-zA-Z]/' filename
任何解释帮助都非常感谢!
答案1
我将其分成两个正则表达式,这看起来正在工作:
cat filename | grep -E '^[0-9]{5}$|^[0-9]{0,3}[hH]{1}[oO]{0,1}[0-9]{0,5}$'
正则表达式的第一部分将尝试仅包含 5 位数字的文件名,第二部分将尝试包含 0-3 位数字、1 个“h”或“H”字母、0 或 1 个“oO”字母、0 到 5 的文件名数字。
这个正则表达式awk
也适用于:
cat filename | awk '/^[0-9]{5}$|^[0-9]{0,3}[hH]{1}[oO]{0,1}[0-9]{0,5}$/ {print}'
答案2
如果你不完全依赖 awk,那么grep
这里可以很好地工作:
$ grep -E '\<[[:digit:]]{1,3}HO?[[:digit:]]{1,5}\>' filename
123H7292
234HO7027
这是您正在寻找的输出吗?我想知道是否HO90902
应该匹配。
和\<
是\>
字边界,因此“12345678H123”将不匹配。