看板 Linux 關於我們 聯絡資訊
各位好, 我寫了一支 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 次去一一的找出每一個字串. 請問各位, 我該如何去改進這一點? 讓我的程式更有效率. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.252.195.55
shinja:grep -e ? 08/29 15:12
suzuke:不是很懂你要的是? 一口氣搜尋5個字串? 08/29 15:19
kdjf:grep 一次可以吃不只一個file 08/29 15:32
kdjf:find -iregex '.*\.txt' -print0|grep -v strings.txt| 08/29 15:40
kdjf:grep -v result.txt| xrags -0 grep -w $name 08/29 15:42
kdjf:find -iregex '.*\.txt' -print0|grep -Zv strings.txt| 08/29 15:43
kdjf:grep -Zv result.txt| xrags -0 grep -w $name 08/29 15:43
PanJC:我想要一口氣搜尋5個字串 若第一個 file.txt 內的第一行有 08/29 16:00
PanJC:字串 A or B or C or D or E 則輸出第一行至 result.txt 08/29 16:01
PanJC:我的 script 是先搜尋A, 再搜尋B,..., 最後是E. 比較沒效率. 08/29 16:03
PanJC:我是初學, k 大的 code 我目前還看不懂, 但是謝謝你 08/29 16:05
shinja:一口氣搜尋多個字串pattern的話 就用grep -e p1 -e p2 08/29 16:14
PanJC:謝謝, 但如果 string=(A B C D E) 08/29 16:28
PanJC:grep -we string >> reslut.txt 似乎沒有用, s大有好方法嗎? 08/29 16:29
cspy:先設定你要的搜尋的字串清單 如果一個檔案內包含其中之一 08/29 16:51
cspy:你可以針對每一行的內容 做五個字串的判斷 08/29 16:55
shinja:http://tinyurl.com/2uvvhng 參考看看吧~應該是你要的 08/29 17:25
shinja:至於string陣列要自己兜成餵給grep or egrep的參數才行 08/29 17:29
shinja:小弟不才~只能想到這樣@@ 08/29 17:29
PanJC:謝謝 08/29 17:42
garyzyg:減少 pipeline, 甚至使用只有 bash 可用的語法. 08/30 11:47