Shell-Script
使用正則表達式進行文件匹配,而不是字元串匹配
我試圖弄清楚如何使用
grep
來搜尋特定的字元串,(為了簡單起見)說"9"
,我想再次為簡單起見,在包含字元的所有文件上搜尋這個b
。我試過
grep -e "9" b
了,但它說它找不到文件b
。(如果我不使用該-e
選項,則相同)。我知道我可以去
grep -e "9" *b*
,但這不是我的意思。我希望使用正則表達式的常用工具進行文件名匹配。我對獲得這個的複雜方法不感興趣。我希望有一個簡單的選項
grep
可以用於此。我仔細閱讀了man
,但我找不到任何有用的東西,但我對 shell 腳本很陌生,所以我很容易錯過它。是否可以使用正則表達式進行文件名匹配
grep
?如果是這樣,怎麼做?
grep
本身沒有使用正則表達式匹配文件的選項。你有兩個選擇:
- 使用 shell glob,比如
grep -e '9' b*
上面是一個非常簡單的例子,但是你可以匹配非常花哨的文件名,特別是如果你使用一些擴展機制。Bellow 是一些
bash
可以打開的有用功能的列表,類似的可以在zsh
和可能的其他 shell 中找到:
globstar
(用於**
匹配整個目錄樹)nocaseglob
(不區分大小寫的匹配)extglob
(擴展模式:?()
,@()
,!()
,*()
,+()
)nullglob
(不匹配的模式擴展為空字元串)
- 用於
find
搜尋文件並grep
從中執行:find . -name 'b*' -exec grep '9' {} +
或者如果需要正則表達式:
find . -regex './b.*' -exec grep '9' {} +
這種方法的優點是您可以添加另一個開關來選擇文件,不僅可以按名稱,還可以按日期、大小等。除非您使用標準 shell 的 glob及其強大的glob qualifiers
find
,否則這是無法做到的。zsh