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

Margaret avatar
By Margaret
at 2010-08-29T13:44

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 次去一一的找出每一個字串.

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


--
Tags: Linux

All Comments

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

星海爭霸連線

Ursula avatar
By Ursula
at 2010-08-28T23:55
請問一下各位大大 小弟我用的是烏斑兔10.04版, 想要打星海(1代)連線, 請問該怎麼做呢? 謝謝 - ...

請問wubi

Heather avatar
By Heather
at 2010-08-28T23:22
請問 如果我在XP裝了wubi 但是想要重灌XP wubi和XP在不同磁區 那wubi需要重新安裝嗎?? 還是只要重灌後再設開機選單就好? 要怎麼設呢?? 感謝各位大大 - ...

更新至10.04之後的mount error

Enid avatar
By Enid
at 2010-08-28T22:38
※ 引述《tempoealtro (tempo e altro)》之銘言: : 標題: [問題] 更新至10.04之後的mount error : 時間: Sat Aug 28 11:53:07 2010 : : 我用了ubuntu大概半年,最近從9.10更新成10.04,開機時出現兩個錯誤, : 分別是us ...

Ubuntu 如何改用舊的kernel開機

Frederic avatar
By Frederic
at 2010-08-28T15:38
前幾天更新ubuntu到新的kernel(2.6.32-24) 然後發現我的電腦用這版的kernel會有問題 但如果改到就一點的kernel(2.6.23-24)就沒問題了 但是問題來了 這樣一來我每次開機都需要進入grub選單 然後用就的kernel開機 請問有什麼方法可以讓我的電腦在開機時自動用舊的ker ...

更新至10.04之後的mount error

Queena avatar
By Queena
at 2010-08-28T11:53
我用了ubuntu大概半年,最近從9.10更新成10.04,開機時出現兩個錯誤, 分別是usb和硬碟的,usb在網路上找到答案了, 不過硬碟的不知道要怎麼解決 (不知道分割是不是怪怪的,當初是用live cd裝的,基本上是不太了解), 我也不太清楚那是什麼錯誤,希望版上先進可以指點一下,感謝~~ 下面的資訊 ...