2017-06-12 66 views
0

我有一個腳本:如何通過bash在多個文件中搜索單詞?

#!/bin/bash 

text="hulk hogan,dolph ziggler" 
IFS="," 
word=($text) 

line=`ls workdir/*.txt` 

for a in "${word[@]}"; do 
for m in $line; do 
if grep -q "$a" "$m"; then 
    echo "$a word is exists" 
    grep "$a" "$m" 
else 
    echo "$a word does not exists" 
    exit 1 
fi 
done 
done 

它的工作原理,當我試圖找到hulk hogan,dolph ziggler。但如果在這種情況下,如果這些單詞存在於所有文件中。在這種情況下,在first.txt中存在hulk hogan,但在second.txt中不存在,它將返回錯誤。我有錯誤,請幫忙。我想在所有文件中搜索這些單詞。在這種情況下,如果所有文件中都不存在來自數組的某個單詞,我想得到錯誤。只有在這種情況下。但是如果單詞存在於一個文件中,而其他單詞存在於其他文件中,我想獲得肯定的結果。感謝您的關注。

+0

問題是'出口1'當你找不到這個單詞時,它會立即退出。所以,只需刪除'exit 1'這一行。 – zhenguoli

+0

難道你不就是'grep'廢船hogan \ | dolph ziggler'workdir/*。txt''嗎? – JNevill

+0

夥計們,我需要'退出1',因爲我不想啓動腳本的其他部分,如果我在某些文件中不存在某個單詞。根據'grep'hulk hogan \ | dolph ziggler'workdir/*。txt''不,因爲我需要在腳本中執行它,我將使用if-else語句之類的異常。 – Piduna

回答

0

拆分文本後恢復IFS以避免意外的結果

splitstr() { 
    local ifs=$IFS 
    IFS=$1 splitstr=($2) IFS=$ifs 
} 

splitstr , "$text" 
word=("${splitstr[@]}") 

不遍歷LS輸出,使用水珠直接

for m in workdir/*.txt; do 

繼續與最內層循環的下一條目

continue 

繼續下一個封閉循環的下一個條目

continue 2