Ack mencari string literal [tertutup]

15

Saya muak harus melarikan diri ketika saya ingin mencari bagian dari tag html.

Bagaimana saya bisa mencari apa yang saya ketik tanpa harus melarikan diri?

misalnya

ack-grep 'console.log(foo'

Saya mendapat:

Unmatched ( in regex; marked by <-- HERE in m/console.log( <-- HERE par/
penguji
sumber
Gunakan shell yang berbeda? Taruh dalam tanda kutip? Tempatkan string pencarian Anda di file, saya curiga ack-grep bisa mendapatkan string dari file. Mungkin Anda bahkan bisa mendapatkan pencarian melalui stdin.
Zoredache
@Zoredache Saya menambahkan contoh yang lebih baik .. Saya tidak mau harus melarikan diri (.. dan apa yang Anda maksud dengan shell yang lebih baik?
tester
Maksud saya semua chracters yang Anda keluhkan ditangani oleh shell Anda (bash / zsh / apa pun). Masalahnya tidak ada hubungannya dengan alat. Masalahnya adalah bahwa shell tidak mengirimkan apa yang Anda ketik.
Zoredache
Ah saya pikir saya menemukannya .. -Q menggunakannya secara harfiah ..
tester

Jawaban:

18

Anda harus melarikan diri dari regex.

ack 'console\.log\(foo'

(Anda harus melarikan diri .sehingga Anda tidak cocok dengan "consoleflog", karena .cocok dengan karakter tunggal mana pun)

Dan jika Anda lebih suka tidak melakukannya, lakukan ini untuk mengutip setiap metacharacter secara otomatis.

ack -Q 'console.log(foo'
Andy Lester
sumber
2
\ Q tidak berfungsi di server saya. ack '\Qconsole.log(foo' ack: Invalid regex '\Qconsole.log(foo': Unmatched ( in regex; marked by <-- HERE in m/\Qconsole.log( <-- HERE foo/
Sébastien
Saya keliru tentang \Qcontoh dan telah menghapusnya dari jawaban. Terima kasih, @ Sébastien.
Andy Lester