我想在當前目錄及其子目錄下的每個.m文件中查找所有出現的ncread
。我使用以下命令:使用grep --include選項?
grep -R --include="\.m" ncread .
但是該命令返回nothings。 grep的聯機幫助頁說:
--include=GLOB
Search only files whose basename matches GLOB
爲什麼它不起作用?謝謝!
我想在當前目錄及其子目錄下的每個.m文件中查找所有出現的ncread
。我使用以下命令:使用grep --include選項?
grep -R --include="\.m" ncread .
但是該命令返回nothings。 grep的聯機幫助頁說:
--include=GLOB
Search only files whose basename matches GLOB
爲什麼它不起作用?謝謝!
因爲例如
foobar.m
的基名稱是
foobar
。
使用發現和grep像這樣:
find -name "*.m" | xargs grep "ncread"
,或者如果你碰巧有空格在文件名:
find -name "*.m" -print0 | xargs -0 grep "ncread"
編輯:
下面介紹如何使用grep做:
grep -R --include='*.m' ncread .
水珠不是一個正則表達式,所以你需要使用的glob語法代替正則表達式語法:--include='*.m'
(注單引號:你想逃跑的水珠你的shell,以避免擴大)
水珠字總結:
* - any number of any characters
? - any single character
[abc] - single 'a', 'b' or 'c' character
\ - escaping, e.g. \* = single '*' character
你可以開始閱讀有關水珠這裏,如果你需要更多的細節:Wiki page about glob
試試這個
grep -R --include="\\.m" ncread *
grep手冊頁說include模式是一個GLOB,但至少在我的cygwin系統上,我已經通過實驗確認它實際上是一個正則表達式。
如果有人仍然感興趣, - 包括在我的ubuntu精確的grep版本2.10中被打破,我通過從GNU站點http://www.gnu.org/software/grep/#TOCdownloading下載新版本的grep(2.14)並從源代碼編譯來修復它。
-download the archive called grep-2.14.tar.xz
-unpack it: xz -d grep-2.14.tar.xz
-untar it: tar -xf grep-2.14.tar
-remove the garbage: rm grep-2.14.tar
-go to its directory: cd grep-2.14
-do: ./configure
-then: make
-and finally: sudo make install
現在運行grep --version以確保您現在安裝了2.14版本。 如果它仍然報告舊版本,請嘗試關閉終端窗口並打開一個新窗口。
真的嗎? 'basename foobar.m'返回foobar.m – yorua007 2012-03-01 08:49:22
確實,我想我自己做了一個傻瓜:) 我要去看一看源代碼。 – hroptatyr 2012-03-01 08:55:25
@ yorua007看到我的拋光答案,實質上grep的文件匹配器需要匹配而不是部分匹配。 – hroptatyr 2012-03-01 09:56:15