2017-08-11 55 views
0

背景:管道的文件到grep和執行與正則表達式的grep搜索

我有一個關鍵字在keywords.txt以下列表:

animal 
building 
person 

和僞造的用戶名和密碼的以下列表在users.txt:

user:[email protected] 
user2:animal234 
user3:animal 

我想用grep兩個相關文件(即搜索某個確切發生在users.txt每個關鍵字)

我第一次嘗試的...

cat keywords.txt | grep -F -w -f- users.txt 

返回

user:[email protected] 
user3:animal 

因爲grep -w將返回其關鍵詞是行「非遵循字組成字符「。因此user:animal @ 234被返回,因爲找到了關鍵字「animal」,後面跟着非單詞組成字符「@」。

我做了一些搜索,發現grep ":animal$" users.txt返回所需的結果:

user3:animal 

因爲「$」是結束行正則表達式符號。

問題:

我無法實現的解決方案來搜索所有關鍵字,而不是僅僅是「動物」。

這是我到目前爲止有:

while read line; do echo -n ":${line}$" | grep -F -f- users.txt; done < keywords.txt 

不幸的是,這^命令返回什麼。它應該返回:

user3:animal 

任何想法,我應該嘗試什麼?

+1

'awk的-F: 'FNR == NR {A [$ 0];下一} $ 2一個' 關鍵字users' – 123

回答

2

您可以使用awk

awk -F: 'NR==FNR{a[$1]; next} $2 in a' keywords.txt users.txt 

user3:animal 
+0

@Brinley:難道這項工作呢? – anubhava