2011-03-23 46 views
2

當我試圖找到模式「 - 文件名」,我得到了奇怪的錯誤信息這是一個GNU grep bug還是我很笨? (新手問題)

[email protected]:~$ grep -file-name README.txt 
grep: ile-name: No such file or directory 
[email protected]:~$ grep \-file-name README.txt 
grep: ile-name: No such file or directory 
[email protected]:~$ grep '-file-name' README.txt 
grep: ile-name: No such file or directory 
[email protected]:~$ grep '\-file-name' README.txt 
-- works well 

我覺得grep的解釋「-file名」作爲-f ILE名,如果我不使用'-file-name'。 我讀了關於grep和正則表達式的文檔,但是我找不到原因。 在我看來,一目瞭然,文件名也應該起作用。

這是一個GNU grep bug嗎?還是常見的linux風格? 因爲我是linux環境的新手,所以我不知道這一點。

GNU grep的版本是2.5.4

回答

2

使用-e,以防止它被解釋爲一種選擇的模式之前。

-e PATTERN, --regexp=PATTERN 
      Use PATTERN as the pattern; useful to protect patterns beginning 
      with -. 

所以,你的代碼應該閱讀:

grep -e -file-name README.txt 

你嘗試只逃脫達到了殼,而不是grep這就是爲什麼你沒有看到任何改變的行爲。

+1

謝謝你的回答。 – lymose 2011-03-24 00:03:55

4

這是標準的POSIX參數處理。圍繞它的兩種方法:

grep -e -file-name README.txt 
grep -- -file-name README.txt 

第一個標記下一個參數是正則表達式,即使它看起來像一個選項;第二個關閉選項解析,所以任何以下--被視爲一個參數,而不是一個選項。

+0

謝謝你的答覆:D – lymose 2011-03-24 00:05:11

相關問題