Terminal: penggunaan perintah grep dengan karakter '[' sebagai target, bukan fungsi

0

Im menggunakan grepperintah Dalam script sederhana, masalah namun Apakah itu string yang perintah grep Apakah mencari termasuk karakter braket persegi: [.

Setelah beberapa penelitian, saya telah menemukan bahwa [karakter tanda kurung siku sebenarnya digunakan sebagai fungsi untuk mengoptimalkan output perintah grep melalui proses yang disebut " pipelining" (Meskipun jangan mengutip saya di atasnya karena saya tidak yakin).

Pertanyaan saya:

Bagaimana cara mencari string dengan karakter '[' di dalamnya tanpa menggunakan fungsi pipelining di dalam grep?

Elaborasi:

Script Sedang mencari log sistem untuk string su[. Ini adalah perintah rusak saya saat ini: tail -1 system.log | grep " su[", namun itu tidak akan bekerja karena braket persegi di akhir, kembali kesalahan: grep: brackets ([ ]) not balanced.

Terima kasih sebelumnya.

pengguna4493605
sumber
1
melarikan diri [dengan \ . Ini akan terlihat seperti: grep " su\[".
Mateusz Szlosek
@Mateusz Szlosek, Tambahkan itu sebagai jawaban, dengan penjelasan mengapa karakter khusus harus diloloskan.
user3439894

Jawaban:

2

Kurung harus diloloskan \, karena itu karakter khusus. Perintah Anda akan terlihat seperti:

tail -1 system.log | grep " su\["

Karakter spesial

Dari situs ini Anda dapat mempelajari tentang karakter khusus di bash.

Apa yang membuat karakter spesial? Jika ia memiliki makna di luar makna literalnya, makna meta, maka kita menyebutnya sebagai karakter khusus. Seiring dengan perintah dan kata kunci, karakter khusus adalah blok bangunan skrip Bash.

\ adalah karakter khusus dan dapat digunakan sebagai:

tes []

Tes ekspresi antara []. Perhatikan bahwa [adalah bagian dari tes builtin shell (dan sinonim untuk itu), bukan tautan ke perintah eksternal / usr / bin / test.

[[]] tes.

Tes ekspresi antara [[]]. Lebih fleksibel daripada tes braket tunggal [], ini adalah kata kunci shell.

[] elemen array.

Dalam konteks array, tanda kurung menetapkan penomoran masing-masing elemen array itu. Array[1]=slot_1

echo ${Array[1]}

[] rentang karakter.

Sebagai bagian dari ekspresi reguler, tanda kurung menggambarkan berbagai karakter yang cocok.

$ [...] ekspansi integer.

Mengevaluasi ekspresi integer antara $ [].

Mateusz Szlosek
sumber
Ya ini bekerja dengan modifikasi sederhana (tail -1 system.log | grep "su \\ ["), mengharuskan backslash tambahan (\) untuk beberapa alasan untuk bekerja dengan baik, namun Anda berada di jalur yang benar, terima kasih.
user4493605