如果我有一个像这样的文件:
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
开关以及为什么我们没有在这里逃避点。