2017-10-06 63 views
-1

我想找到的腳本文件,我需要從這些文件得到諸如bash,sh的所有解釋的列表等轉義#在BRE正則表達式

地發現,我用:

grep "#!/bin/*" ./* 

但它顯示:

-bash: !/bin/*": event not found 

我想我需要以某種方式逃避#符號,但我沒有找到符號在BRE的文件進行轉義。

而我如何才能找到包含這種模式的文件在正則表達式只在文件的第一行?

+0

請注意,您可以禁用[歷史擴展(https://www.gnu.org/software/bash/manual/html_node/History-Interaction .html)通過使用'set + H',例如可以將其添加到'.bash_rc'中。我不會將此作爲答案發布,因爲您不應該依賴它來讓腳本正常工作,但是由於我覺得這個功能令人討厭,所以我喜歡爲自己禁用它。 – Aaron

回答

2
  • #是沒有問題的,你應該逃脫!,在Bash中它是指一個以前的命令和必須遵循的東西,$爲前一個命令或者表示該命令的索引號在歷史上。 (感謝Aaron的校正)

  • 你也可能要改變*.*

grep "#\!/bin/.*"

  • 如果你不想逃避!,使用單引號,如:

    grep '#!/bin' .... 
    

您也可以通過使用-F

+0

@你真的是對的! 「這裏」令人困惑。我在答案中糾正了它。 – Kent

+0

不客氣!感謝信貸我,但真的沒有必要:) – Aaron

0

可否請您嘗試以下find命令,讓我知道,如果這有助於禁用regex比賽。

find -type f -exec grep -l '#!/bin*' {} \+ 
0

逃離!\

grep "#\!/bin/*" ./*