Shell

如何通過ack搜尋括號

  • March 5, 2015

(我想使用搜尋括號ack,但既不使用(也不\(工作。

第一個 (" (") 被辨識為多行命令。第二個(“ \(”)被視為無效的正則表達式。

如何使用 搜尋括號字元ack

錯誤資訊

% ack foo\(
Invalid regex 'foo(':
 Unmatched ( in regex; marked by <-- HERE in m/foo( <-- HERE / at /usr/local/bin/ack line 332.

要搜尋括號字元,請將反斜杠+括號傳遞給 ack。

反斜杠和括號在 shell 中都是特殊的,因此當您在 shell 腳本或命令行中輸入它們時需要將它們引用。最簡單的引用形式是使用單引號:這告訴 shell 逐字逐句地傳遞除了單引號本身之外的所有內容。

ack '\('

您還可以使用反斜杠來保護特殊字元免受 shell 擴展,但它的可讀性往往較差:

ack \\\(

第一個反斜杠引用了 shell 中的第二個反斜杠,因此參數的第一個字元ack\. 第三個反斜杠引用括號,因此參數的第二個字元ack(。就像上面單引號的情況一樣,ack看到的參數是兩個字元的字元串\(

ack (不起作用,因為 shell 看到一個左括號並將其視為 shell 語法。ack \(不起作用,因為 shell(作為參數傳遞給ack,並且 ack 將正則表達式中的括號解釋為指示組的開始。

引用自:https://unix.stackexchange.com/questions/188085