[英]Quotes when using grep?
Grep的行為取決於我圍繞正則表達式的引號類型。 我似乎無法清楚地理解為什么會這樣。 以下是問題的示例:
hamiltont$ grep -e show\( test.txt
variable.show();
variable.show(a);
variable.show(abc, 132);
variableshow();
hamiltont$ grep -e "show\(" test.txt
grep: Unmatched ( or \(
hamiltont$ grep -e 'show\(' test.txt
grep: Unmatched ( or \(
我只是假設有一些正確的方法用單/雙引號括起正則表達式。 有幫助嗎?
FWIW, grep --version
返回grep (GNU grep) 2.5.1
包含參數的命令行在執行之前由shell處理。 您可以使用echo來查看shell的功能:
$ echo grep -e show\( test.txt
grep -e show( test.txt
$ echo grep -e "show\(" test.txt
grep -e show\( test.txt
$ echo grep -e 'show\(' test.txt
grep -e show\( test.txt
所以沒有引號就會刪除反斜杠,使得“(”是grep的普通字符(grep默認使用基本的正則表達式,使用-E使grep使用擴展的正則表達式)。
為了:
grep -e show( test.txt
不起作用,因為shell解釋(
特殊的,括號,而不僅僅是一個字符,並且無法找到結束)
。
這兩個都有效:
grep -e 'show(' test.txt
grep -e "show(" test.txt
因為shell將引用的文本視為文本,並將其傳遞給grep。
這些不起作用:
grep -e 'show\(' test.txt
grep -e "show\(" test.txt
因為shell傳遞show\\(
到grep,grep看到\\(
作為特殊的,括號,而不僅僅是一個字符,並且找不到結束\\)
。
引號改變了grep看到的內容。 未引用形式的反斜杠(\\)由shell處理,它將反斜杠后的字符視為特殊字符。 這在grep獲取參數之前發生。 grep看show( 。當使用引號(單引號或雙引號)時,shell將它們解釋為“單獨保留內容”,因此grep看到show \\(和\\(字符在grep中有意義,它正在尋找結束)括號 - \\)。
BTW:單引號和雙引號處理在shell處理shell變量的方式上有所不同,但在您的示例中沒有shell變量。
我不相信它是表現不同的grep,它是shell。 我假設你正在使用bash
http://www.faqs.org/docs/bashman/bashref_8.html
基本上,引用的版本在斜杠上的行為有所不同,具體取決於引用機制。
兩個引用的例子都可以在沒有斜線的情況下工作。 對於第一個,shell將逃脫(並傳入剛顯示(到模式的grep)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.