Shell
如何通過ack搜尋括號
(
我想使用搜尋括號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 將正則表達式中的括號解釋為指示組的開始。