Shell-Script

使用正則表達式進行文件匹配,而不是字元串匹配

  • December 24, 2018

我試圖弄清楚如何使用grep來搜尋特定的字元串,(為了簡單起見)說"9",我想再次為簡單起見,在包含字元的所有文件上搜尋這個b

我試過grep -e "9" b了,但它說它找不到文件b。(如果我不使用該-e選項,則相同)。

我知道我可以去grep -e "9" *b*,但這不是我的意思。我希望使用正則表達式的常用工具進行文件名匹配。

我對獲得這個的複雜方法不感興趣。我希望有一個簡單的選項grep可以用於此。我仔細閱讀了man,但我找不到任何有用的東西,但我對 shell 腳本很陌生,所以我很容易錯過它。

是否可以使用正則表達式進行文件名匹配 grep?如果是這樣,怎麼做?

grep本身沒有使用正則表達式匹配文件的選項。

你有兩個選擇:

  1. 使用 shell glob,比如
grep -e '9' b*

上面是一個非常簡單的例子,但是你可以匹配非常花哨的文件名,特別是如果你使用一些擴展機制。Bellow 是一些bash可以打開的有用功能的列表,類似的可以在zsh和可能的其他 shell 中找到:

  • globstar(用於**匹配整個目錄樹)
  • nocaseglob(不區分大小寫的匹配)
  • extglob(擴展模式:?(), @(), !(), *(), +()
  • nullglob(不匹配的模式擴展為空字元串)
  1. 用於find搜尋文件並grep從中執行:
find . -name 'b*' -exec grep '9' {} +

或者如果需要正則表達式:

find . -regex './b.*' -exec grep '9' {} +

這種方法的優點是您可以添加另一個開關來選擇文件,不僅可以按名稱,還可以按日期、大小等。除非您使用標準 shell 的 glob及其強大的glob qualifiersfind ,否則這是無法做到的。zsh

引用自:https://unix.stackexchange.com/questions/490785