我必须使用 grep 从文本文件中找出 8 个邮政编码,每个邮政编码的字符顺序如下:1. 大写字母 2. 数字 3. 大写字母 4. 空格(可选)5. 数字 6. 大写字母 7. 数字
我使用了 grep 命令:
grep '[A-Z][0-9][A-Z][0-9+[][0-9][A-Z][0-9]'
这给了我 5 个邮政编码,其中第 4 个字符处有一个空格
我也使用过这个 grep 命令:
grep '[A-Z][0-9][A-Z][0-9\.][A-Z][0-9]'
这给了我最后 3 个邮政编码,其中第 4 个字符处没有空格。
我不知道如何编写一个命令来表明空格是可选的。谢谢
答案1
ERE 量词?
表示零次或一次出现。因此
grep -E '[A-Z][0-9][A-Z] ?[0-9][A-Z][0-9]'
如果你想允许零或者更多空格,请更改?
为*
。要允许制表符和空格,可以使用[ \t]?
、[[:blank:]]?
或 (在 GNU grep 中)\s?
答案2
像下面这样的表达式应该有效:
grep '[A-Z][0-9][A-Z][ ]*[0-9][A-Z][0-9]' file
答案3
我的建议:
grep -P "[A-Z][0-9][A-Z][0-9][ ]{0,1}[0-9][A-Z][0-9]" file