grep 中仅匹配一系列数字中的单个数字

grep 中仅匹配一系列数字中的单个数字

如果我有一个像这样的文件:

hostname1.domain.com
hostname2.domain.com
hostname3.domain.com
hostname23.domain.com
hostname1234.domain.com

我怎样才能grep只返回:

hostname1.domain.com
hostname2.domain.com
hostname3.domain.com

这样我只得到一个返回的数字。我在尝试:

grep -E hostname[+1,+2,+3].domain.com

这似乎可行,但我想知道是否有更好的方法。

答案1

做:

grep 'hostname[0-9]\.domain\.com' infile

[0-9]匹配 0~9 之间的单个数字,您需要转义点.来匹配点字面意思,否则意味着匹配任何单个字符(但换行符);并始终引用您的模式,以避免 shell 对特殊事物(如通配符、大括号扩展或其他)进行解释。

如果您只想将其限制为主机名 1、2 和 3,您可以执行以下操作:

grep 'hostname[123]\.domain\.com' infile

或等价:

grep 'hostname[1-3]\.domain\.com' infile

您可能还想使用-x(仅选择那些与整行完全匹配的匹配项,或者用^行首和$行尾锚点围绕它。)

grep -x 'hostname[0-9]\.domain\.com' infile
grep  '^hostname[0-9]\.domain\.com$' infile

完全匹配字符串,hostname23.domain.com而不是其他任何东西:

grep -xF 'hostname23.domain.com' infile

人 grep对于-F开关以及为什么我们没有在这里逃避点。

相关内容