如何改進我的 shell 程式效率 - Linux

Table of Contents


各位好, 我寫了一支 shell script, 目的在搜尋現行目錄所有 ".txt" 檔內的字串.

若 ".txt" 檔有我要的字串, 就把該字串的整行輸出到 result.txt. 因為我要搜尋字

串有很多, 就先把字串都寫入 strings.txt, 再用迴圈一個個的搜尋.


##################### 以下是我的 shell script ################################
string=`cat strings.txt`
for file_name in `ls -F | grep ".txt"`
do
if [ $file_name != "strings.txt" ] && [ $file_name != "result.txt" ]
then
for name in $string
do
grep -w $name $file_name >> result.txt
done
fi
done
##################### 以上是我的 shell script ################################

但我後來發現, 這樣的寫法很沒有效率. 假設共有 5 個字串在 strings.txt 中,

則根據以上 script 的邏輯, 每個檔案都要被我搜尋 5 次去一一的找出每一個字串.

請問各位, 我該如何去改進這一點? 讓我的程式更有效率.


--

All Comments

Todd Johnson avatarTodd Johnson2010-08-31
grep -e ?
Jack avatarJack2010-09-02
不是很懂你要的是? 一口氣搜尋5個字串?
Frederica avatarFrederica2010-09-02
grep 一次可以吃不只一個file
Emily avatarEmily2010-09-03
find -iregex '.*\.txt' -print0|grep -v strings.txt|
Eartha avatarEartha2010-09-07
grep -v result.txt| xrags -0 grep -w $name
Ingrid avatarIngrid2010-09-10
find -iregex '.*\.txt' -print0|grep -Zv strings.txt|
grep -Zv result.txt| xrags -0 grep -w $name
Mia avatarMia2010-09-14
我想要一口氣搜尋5個字串 若第一個 file.txt 內的第一行有
Heather avatarHeather2010-09-15
字串 A or B or C or D or E 則輸出第一行至 result.txt
Wallis avatarWallis2010-09-17
我的 script 是先搜尋A, 再搜尋B,..., 最後是E. 比較沒效率.
Christine avatarChristine2010-09-21
我是初學, k 大的 code 我目前還看不懂, 但是謝謝你
Carol avatarCarol2010-09-25
一口氣搜尋多個字串pattern的話 就用grep -e p1 -e p2
Ivy avatarIvy2010-09-27
謝謝, 但如果 string=(A B C D E)
Agnes avatarAgnes2010-09-30
grep -we string >> reslut.txt 似乎沒有用, s大有好方法嗎?
Susan avatarSusan2010-10-03
先設定你要的搜尋的字串清單 如果一個檔案內包含其中之一
Hedda avatarHedda2010-10-04
你可以針對每一行的內容 做五個字串的判斷
Enid avatarEnid2010-10-07
http://tinyurl.com/2uvvhng 參考看看吧~應該是你要的
Rae avatarRae2010-10-10
至於string陣列要自己兜成餵給grep or egrep的參數才行
小弟不才~只能想到這樣@@
Lily avatarLily2010-10-14
謝謝
Skylar DavisLinda avatarSkylar DavisLinda2010-10-16
減少 pipeline, 甚至使用只有 bash 可用的語法.