$ cat file
anna
amma
kklks
ksklaii
$ grep '\`' file
anna
amma
kklks
ksklaii
爲什麼?這場比賽如何運作?grep正則表達式反向匹配所有行
$ cat file
anna
amma
kklks
ksklaii
$ grep '\`' file
anna
amma
kklks
ksklaii
爲什麼?這場比賽如何運作?grep正則表達式反向匹配所有行
twm's answer提供了重要指針,但要注意,它是序列\`
而不是`
本身充當GNU正則表達式中的輸入起始點。
因此,以匹配指定爲單引號shell字符串正則表達式文字反引號,你並不需要在所有任何逃避,也沒有用GNU grep
,也不符合BSD/MacOS的grep
:
$ { echo 'ab'; echo 'c`d'; } | grep '`'
c`d
當使用雙引號貝殼串 - 你應該避免爲正則表達式,原因ŧ帽子將成爲顯而易見的 - 事情變得更加複雜,因爲你那麼必須逃脫`
爲外殼的緣故,以便通過爲文字將它傳遞給grep
:
$ { echo 'ab'; echo 'c`d'; } | grep "\`"
c`d
需要注意的是,外殼已解析後"..."
字符串,grep
仍然只看到`
。
要重新創建一個雙引號字符串的原始命令與GNU grep
:
$ { echo 'ab'; echo 'c`d'; } | grep "\\\`" # !! BOTH \ and ` need \-escaping
ab
c`d
此外,殼的字符串解析後,grep
看到剛剛\`
,這在GNU grep
是啓動的所有輸入行匹配。
grep
處理輸入線,\`
具有如^
相同的效果線錨開始-α-的-;與多行輸入,但是 - 如果您使用grep -z
一次讀取所有行 - \`
只匹配整個字符串的最開始。要BSD/MACOS grep
,\`
簡單地逸出字面`
,所以它僅匹配包含一個輸入線路。
這似乎是正則表達式的GNU擴展。反引號('\`')錨匹配主題字符串的開頭,這就解釋了爲什麼它匹配所有行。 OS X顯然沒有實現GNU擴展,這可以解釋爲什麼你的例子不符合那裏的任何一行。見http://www.regular-expressions.info/gnu.html
如果您希望在GNU擴展實際上是相匹配的實際反引號,這對我的作品:
grep '[`]' file
請注意,MacOS'grep'做你認爲它應該; GNU會顯示這種行爲。還要注意,放下反斜槓將使其工作。所以當一個反引號被轉義出來時,在GNU'grep'中發生了一些奇怪的事情(AFAIK應該相當於簡單的反引號,但不是)。 – Amadan
另請注意,添加'-P'選項(使用PCRE引擎)將使其行爲。所以我傾向於認爲這是GNU'grep'解析正則表達式的錯誤。 – Amadan