Grep与“half” - 完全匹配

时间:2009-10-04 12:43:15

标签: bash sed grep

我尝试使用grep来匹配这样的情况:

我有以这种格式的主机名和ips列表:

238-456 192.168.1.1
ak238-456 192.168.1.2
238-456a 192.168.1.3
458-862 192.168.1.4

现在我尝试grep“238-456”但当然这会返回:

238-456 192.168.1.1

和...

ak238-456 192.168.1.2

和...

238-456a 192.168.1.1

但我只需要238-456的线。在这种情况下,我不能使用-x因为当然它不会返回任何结果。

有没有简单的方法来解决这个问题?

给定的答案“^”解决了第一个问题。但最后不是那个带有“a”的人。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

在此特定示例中,您可以搜索^238-456,它仅在行开头出现所需文本时才匹配。有关更一般的解决方案,请了解正则表达式(这是一个示例)。

编辑:

对于您的新问题,您只需通过搜索"^238-456 "手动添加空格即可。空格也有一些正则表达式字符类。 "^238-456\>"应该在这里工作。 \>表示单词边界,您可能需要包含引号。另一个单词边界是\<,因此您可以将整个内容更改为"\<238-456\>",这样就可以消除它在行开头的依赖性。

答案 1 :(得分:2)

使用awk

awk '$1=="238-456"' file

答案 2 :(得分:0)

您可以使用正则表达式:

egrep "^238-456"

应该这样做,要求从行的开头检查。

可以找到这些正则表达式的教程示例here