我在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的多个值。有没有办法从列表中找到确切的服务器名称?
答案 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 | awk
为useless-use-of-grep。请参阅janos的答案以获得更佳的解决方案。