Escape tanda kutip ganda di grep

91

Saya ingin melakukan grep untuk kata kunci dengan tanda kutip ganda di dalamnya. Sebagai contoh sederhana:

echo "member":"time" | grep -e "member\""

Itu tidak cocok. Bagaimana cara memperbaikinya?

Qiang Li
sumber

Jawaban:

133

Masalahnya adalah Anda tidak keluar dengan benar dari string input, coba:

echo "\"member\":\"time\"" | grep -e "member\""

Alternatifnya, Anda dapat menggunakan tanda kutip ganda tanpa konversi karakter dalam tanda kutip tunggal:

echo '"member":"time"' | grep -e 'member"'

Ini adalah masalah preferensi yang menurut Anda lebih jelas, meskipun pendekatan kedua mencegah Anda menempatkan perintah Anda di dalam kumpulan tanda kutip tunggal lainnya (misalnya ssh 'cmd').

cmh
sumber
1
apakah ini akan berhasil? echo '"member":"time"' |grep -e "member"tidak menguji
semut
Hampir. Itu perlu echo '"member":"time"' |grep -e 'member"'. Kedua pendekatan tersebut valid, tetapi saya lebih memilih pelolosan eksplisit, karena tujuannya lebih jelas.
cmh
ya, mungkin edit jawaban Anda jika Anda suka seseorang mungkin lebih suka ini (+1)
semut
Ini (menggunakan garis miring terbalik) tidak berfungsi di Windows untuk saya. Sebenarnya ini berfungsi sebagian, tetapi saya tidak dapat mengarahkan output ke file.
Radim Cernej
@ RadimCernej Saya akan merekomendasikan mengajukan pertanyaan khusus jendela - tampaknya di luar cakupan yang satu ini.
cmh