Saya mencoba mencari string 0.49
(dengan titik) menggunakan perintah
grep -r "0.49" *
Tetapi yang terjadi adalah saya juga mendapatkan hasil yang tidak diinginkan yang berisi string seperti 0449
, 0949
dll. Masalahnya adalah linux mempertimbangkan dot (.) Sebagai karakter apa saja dan mengeluarkan semua hasilnya. Tetapi saya ingin mendapatkan hasil hanya untuk "0,49".
\\.
bisa bekerja. Saya menggunakan zsh.\\.
bash juga, atau menggunakannya"\."
untuk melarikan diri dari shell.grep -F -r '0.49' *
memperlakukan 0,49 sebagai string "tetap" alih-alih ekspresi reguler. Ini membuat.
kehilangan makna khususnya.sumber
Anda harus lolos dari
.
as"0\.49"
.A
.
adalah meta-karakter regex yang cocok dengan karakter apa pun (kecuali baris baru). Untuk mencocokkan periode literal, Anda harus menghindarinya.sumber
Lepaskan saja
.
grep -r "0\.49"
sumber
Anda juga bisa menggunakan "[.]"
sumber
Ada begitu banyak jawaban di sini yang menyarankan untuk melarikan diri dari titik dengan
\.
tetapi saya telah mengalami masalah ini berulang-ulang:\.
memberi saya hasil yang sama seperti.
Namun, kedua ungkapan ini cocok untuk saya:
Dan:
Saya menggunakan "bash shell" normal di Ubuntu dan Archlinux.
Edit, atau, sesuai dengan komentar:
Catatan, tanda kutip tunggal melakukan perbedaan di sini.
sumber
grep '\.'
ataugrep \\.
(saya akan sangat menyarankan yang pertama. Kutipan ganda berfungsi juga, seperti pada pertanyaan awal; tetapi tanda kutip tunggal lebih mudah dipahami dan digunakan. Misalnya, dengan tanda kutip ganda, Anda masih perlu menggandakan garis miring terbalik dalam beberapa skenario ).Titik pelarian. Perintah sampel akan.
sumber
Anda dapat menghindari titik dan karakter khusus lainnya menggunakan \
misalnya. grep -r "0 \ .49"
sumber
\.
dikelilingi dengan tanda kutip diperlukan untuk membuatnya bekerja.Anda juga dapat mencari dengan - opsi yang pada dasarnya mengabaikan semua karakter khusus dan itu tidak akan ditafsirkan oleh grep.
sumber