何時在 grep 搜尋字串中使用 \

何時在 grep 搜尋字串中使用 \

我的文件內容類似:

A+B
C+D
A+B

這些是字串。我想搜尋 的出現A+B。所以我將命令寫成:grep 'A+B' test.txt。但是,如果我寫,grep 'A\+B' test.txt我不會得到任何結果?而如果代替+字串 contains .,如果我添加\或不添加,我會得到搜尋結果。我不明白:

1)什麼時候應該添加\,什麼時候不應該添加。

2)為什麼我添加後沒有得到任何結果,+而我添加後卻得到結果.

答案1

您沒有指定grep您使用什麼口味,但您可能使用GNU grep.預設grep使用Basic Regular Expressions, 並如 所述man grep

基本正規表示式與擴展正規表示式

在基本正規表示式中,元字元 ?、+、{、|、(
和 ) 失去了它們的特殊意義;而是使用反斜線
版本 \?、+、{、\|、( 和 )。

請注意,如果您使用過,-E您將切換到Extended Regular Expressions (ERE)並且必須使用,\+因為預設 in ERE和許多其他正規表示式語法+代表one or more of the preceding character

$ grep -E 'A\+B' test.txt
A+B
A+B

所以,回答你的問題:

  1. \當您想要搜尋文字字元時應該使用。

  2. InBRE一個點代表any character就像 in 一樣ERE

答案2

In egrep(或grep -E) 擴充正規表示式已啟用。這些包括:

+ - match one or more instances of the previous match pattern.

grep這些可以在 basic 中與前面的反斜線一起使用,它沒有通常的文字含義,而是呼叫egrep函數。

所以以下是等價的:-

egrep 'A+B'
grep 'A\+B'

在這兩種情況下,匹配都是一個或多個As 緊隨其後B

因為egrep'+' 有特殊意義,必須對其進行轉義才能按字面匹配,因此以下內容也是等價的:

egrep 'A\+B'
grep 'A+B'

這些都會匹配A+B,因為在這兩種情況下都會尋找文字“+”。

egrep可以透過轉義 in 使用的其他函數grep包括\|替代匹配字串 和\{M,N\},其中 M 和 N 是表示匹配模式上重複的最小和最大次數的數字。這些都沒有在 中轉義egrep

相關內容