grep
本身能夠這樣做。簡單地使用該標誌-f
:
grep -f <patterns> <file>
<patterns>
是包含在每行一個圖案的文件;而<file>
是要在其中搜索內容的文件。
請注意,要強制grep
要考慮每行一個模式,即使每行的內容看起來像正則表達式,也應該使用標誌-F, --fixed-strings
。
grep -F -f <patterns> <file>
如果你的文件是一個CSV,如你所說,你可以這樣做:
grep -f <(tr ',' '\n' < data.csv) <file>
作爲一個例子,考慮文件 「a.txt中」,用下面幾行:
alpha
0891234
beta
現在,文件 「b.txt」,用線:
Alpha
0808080
0891234
bEtA
以下命令的輸出是:
grep -f "a.txt" "b.txt"
0891234
你不需要在所有for
-loop這裏; grep
本身提供此功能。
現在使用的文件名:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
您可以更改','
你在你的文件有分隔符。
考慮編輯您的問題,以包含每個文件中的2行以及給定這些輸入的預期輸出。祝你好運。 – shellter 2013-02-25 04:20:18
上面的腳本不使用'file'變量,而是在那裏記錄名稱。嘗試'while read -r line <$ file; do'。也就是說,'ksh'糟透了,我還沒有檢查它使用'-r'來確定它是否會起作用。此外,即使csv文件中的行具有其他前導或尾隨數字,grep也會期望正則表達式並匹配任何包含數字的值:您可能需要'grep -w'或類似的語句。 – 2013-02-25 04:47:40