Grep 只包含两个数字的字符串

Grep 只包含两个数字的字符串

我有一个示例文件,其中包含字符串

GABCDF64V3
HABDDF61WE
KABSDF6WER
HAADYF6WE2

我只需要字符串仅包含两个数字的值(字符串中的任何位置),意味着输出应该是HABDDF61WE哈迪F6WE2仅有的。

我尝试过这个表达

grep -E '.*[0-9]{1,}.*[0-9]{1,}.*'

但输出不一样

答案1

要在 grep 中执行此操作,您需要全线由零个或多个非数字组成,后跟一个数字,后跟零个或多个非数字,后跟一个数字,最后以零个或多个非数字结束。例如

$ grep -x '[^0-9]*[0-9][^0-9]*[0-9][^0-9]*' file
HABDDF61WE
HAADYF6WE2

(仅限拉丁十进制数字)或

$ grep -Px '\D*\d\D*\d\D*' file
HABDDF61WE
HAADYF6WE2

如果您的 grep 实现不提供-x/--line-regexp选项,您可以使用^and$行锚点:

$ grep '^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*$' file
HABDDF61WE
HAADYF6WE2

或者,您可能会发现整个事情在类似awkex 的事情中更简单。

$ awk 'gsub(/[[:digit:]]/,"&") == 2' file
HABDDF61WE
HAADYF6WE2

gsub返回替换的数量)。你可以用 Perl 做类似的事情tr

答案2

awk -F '[0-9]' 'NF==3' file

按数字分割后,具有 3 个字段的行就是具有 2 个数字的行。

相关内容