Shell

為什麼 grep fil* 會失敗?

  • January 10, 2017

我發現echo file|grep fil*失敗了,但是echo abcd|grep abc*成功了。

沒看懂,誰能解釋一下?

你的例子有兩個問題。

第一個是您假設正則表達式的工作方式與glob 模式相同,因為它*是萬用字元,意思是“任何字元序列”。在正則表達式中,*表示“任意數量的前一個原子”,因此fil*表示f後跟i零個或多個l字元。您需要說grep fil.*才能獲得預期的含義:.表示“任何單個字元,因此.*表示“任何字元序列”。

較小的問題是您使用了未加引號的特殊字元,這些字元在 glob 規則下意味著某些東西,這意味著 shell 可以解釋它們。如果本地目錄中有任何文件匹配 glob 模式fil*abc*shell 將擴展它們,因此grep會將擴展的文件名作為模式獲取,而不是預期的 RE。每當你在命令行上使用這些字元時,你應該引用它們:echo file | grep 'fil.*'.

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