2013-02-15 114 views
0

我在外殼的工作包括,我想寫一個班輪將讀取文件一個的文件內容和文件執行grep命令。shell腳本來讀取文件和grep其他文件

例如,假設有兩個文件

dataFile.log已下列值

abc

xyz

...

現在讀ABC和grep o ñsearchFile.loggrep abc searchFile.log

我有shell腳本相同,但要一個襯墊它

for i in "cat dataFile.log" do grep $i searchFile.log done; 
+0

是的,我想這樣做。 searchFile.log包含以下數據: 'M | 21 | Sid' 'F | 27 | Ani' 'M | 24 | Joe' – Sid 2013-02-15 11:39:41

回答

0

您可以使用grep -f選項:

cat dataFile.log | grep -f searchFile.log 

編輯

好了,現在我明白了這個問題。你想用每行從dataFile.logsearchFile.log到grep。我也看到你有value1|value2|...,所以不是grep你需要egrep

試試這個:

for i in `cat dataFile.log` 
do 
    egrep "$i" searchFile.log 
done 

編輯2

繼chepner建議:

egrep -f dataFile.log searchFile.log 
+0

沒有幫助,從這.... :( – Sid 2013-02-15 11:58:04

+0

更新完成。需要! – fedorqui 2013-02-15 12:32:49

+0

http://mywiki.wooledge.org/DontReadLinesWithFor這也需要無數個電話到'egrep'在使用'一個電話-f'會做。 – chepner 2013-02-15 14:03:16

0

如何執行以下操作:它甚至忽略空行和#註釋:

while read FILE; do if [[ "$FILE" != [/a-zA-Z0-9]* ]]; do continue; fi; grep -h pattern "$FILE"; done;

當心:沒有編譯這一點。

1

試試這個:

grep -f dataFile.log searchFile.log 

需要注意的是,如果你想與grep爲固定字符串,則需要-F,如果你想在dataFile.log文本爲正則表達式匹配,使用-E-P

+0

您可能需要'egrep'代替,如'searchFile.log'有一個像'M文字| 21 |希德F | 27 |阿尼M | 24 | Joe'(看到這個問題的意見)。 – fedorqui 2013-02-15 14:14:50

+0

@fedorqui OP說'我有shell腳本相同的,但要爲it'一個襯墊,並採取一看就是劇本,我沒有看到'-E'但你是對的。 – Kent 2013-02-15 14:17:50