从bash文件中的列表中查找确切名称

时间:2013-11-26 06:03:52

标签: bash grep

我在bash中有以下数据文件。我想搜索用户输入的webserver是否存在于数据文件中,如果存在,它应该返回阶段和托管服务器名称。

1 K1 tvtw1 tvtm1
1 K1 tvtw2 tvtw2
2 K2 tvtw26 tvtw26
3 k5 tvtw29 tvtm29

我尝试grep "$webserver" serverList.lst | awk '{print $1}'但它返回了tvtw2的多个值。有没有办法从列表中找到确切的服务器名称?

3 个答案:

答案 0 :(得分:0)

如果我理解正确,如果第3列完全匹配,那么你想得到第1列的值:

awk -v serv=tvtw2 '$3 == serv {print $1}' serverList.lst

也就是说,我们将要匹配的字符串放在变量serv中,然后将其用作awk中的过滤器表达式,以完全匹配第3列。

答案 1 :(得分:0)

您需要在grep正则表达式中添加单词边界,以便不会选择tvtw26

e.g。 grep '\btvtw2\b' file ...

但是,由于您已经使用过awk,因此您可以考虑使用awk。 @janos的回答表明它是如何完成的。

答案 2 :(得分:0)

尝试grep -w-w代表单词正则表达式)

但是,grep | awkuseless-use-of-grep。请参阅janos的答案以获得更佳的解决方案。