查看積分策略說明發表回覆
Discuz! 代碼
提示插入
直接插入
說明訊息

插入粗體文本 插入斜體文本 插入下劃線 置中對齊 插入超級連結 插入信件位址 插入圖像 插入 flash 插入代碼 插入引言 插入列表
刪除線 直線分隔線 虛線分隔線
    
添加文字底框
內容 [字數檢查]:

表情符號

更多 Smilies
字型大小 |||
溫馨提示:本區開放遊客瀏覽。


文章關鍵字 : [功能說明]
(關鍵字可加強搜索準確性, 如關鍵字多於一組, 請以 , 作分隔, e.g. : 阿笨,shiuh,第一笨)

 關閉 URL 識別 | html 禁用
 關閉 表情符號 | 表情符號 可用
 關閉 Discuz! 代碼 | Discuz! 代碼 可用
使用個人簽名
接收新回覆信件通知
推薦放檔網絡空間

檔案(Torent, zip等)
  1. freedl
  2. multiupload
  3. btghost
  4. 便當狗
  5. mediafire
  6. pillowangel
圖片(JPG, GIF等)
  1. hotimg
  2. tinypic
  3. mousems2
  4. imageshack
  5. imm.io
>>>歡迎推薦好用空間


最新10篇文章回顧
innova

 發表於 2006-7-27 03:52 AM

新版 grep 有 -r 可以找子目錄下的檔案
舊版 grep 有 -l 列出檔名!

so...

新版:  grep -r -l "KeyWord" Dirs

舊版:  find . -name "*.h" -exec grep -l "KeyWord" {} \;


Efain

 發表於 2006-7-26 10:35 PM

find + -exec是常見的指令...說真的,還滿好用的...


eric_superman

 發表於 2006-7-13 12:35 AM

唉...我真是老了,
grep 進步到內建 recursive 都不知道!
我學Unix時的 grep ,是沒有 -r 參數的......

Anyway, 當某些功能無內建 recursive 時, find 還是派的上用場....
感謝 LSO 的指正!


LSO

 發表於 2006-7-12 11:17 PM

我請問一下
grep -r 是否是另一種方式


alexanita

 發表於 2006-6-12 11:24 AM

以你的例子也可以執行
find /usr/include -name "*.h" -exec grep IPPROTO_IPV6 {} \; -print

find 的功能很強大,接個exec後就可以做很多事情了!


eric_superman

 發表於 2006-6-11 10:35 PM

在 Windows 下的UltraEdit ,有一個功能 "Find in Files" ,配合 Search Sub Directories 選項打開時,
可遞迴搜尋一個子目錄所有檔案當中有無特定字串,這在許多場合都很有用,
那在 Unix 時,如何搜尋呢,很多人直接想到 grep ,
可惜的是,grep無法遞迴搜尋一個子目錄下的所有檔案,grep 一次只能搜尋一個目錄的一層。
例如  /usr/include 下,通常還有 /usr/include/sys, /usr/include/netinet ,
想要找個  IPPROTO_IPV6 出現在那個 header file ,
用 grep 得試許多個子目錄。

這個時候,就要結合 find 。   find 專門用來找特定檔名的,找到後,要印,要呼叫另一個程式,都可以,

cd /usr/include
find . -name "*.h" -exec grep IPPROTO_IPV6 {} \; -print

以上的find 的參數分四大區:
1)    .    一個點,代表 current directory。
2)   -name "*.h"     -name 是用來指定檔名的條件。加了雙引號是怕 shell 把 *.h 都展開了,那 find 就會錯掉。
3)   -exec grep IPPROTO_IPV6 {} \;      -exec 是執行外部程式,grep IPPROTO_IPV6 大家都很熟, {} 則是 find
       的特殊符號,任何檔名都會代入此處,然後呼叫 grep。     \; 則是另一個 find 的特殊符號 ,代表 -exec 的結束。
4)   -print  ,印出檔名。


輸出結果如下:
  IPPROTO_IPV6   = 41,          /* IPv6-in-IPv4 tunnelling              */

./linux/in.h

    IPPROTO_IPV6 = 41,     /* IPv6 header.  */
#define IPPROTO_IPV6            IPPROTO_IPV6
./netinet/in.h


藍色部分是  find  的 -print 所印出的檔名。
其他的就是 grep 的輸出結果,
兩種輸出是交錯的。

覺得有幫到您的忙的話,就請賞點花吧!

[eric_superman 在  2006-6-13 12:16 AM 作了最後編輯]





所在時區為 GMT+8, 現在時間是 2024-4-28 05:13 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.017949 second(s), 6 queries , Qzip disabled