簡體   English   中英

使用grep時引用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM