Fuga virgolette doppie in grep


96

Volevo fare grep per le parole chiave con virgolette doppie all'interno. Per fare un semplice esempio:

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

Quello non corrisponde. Come posso ripararlo?

Risposte:


139

Il problema è che non stai eseguendo correttamente l'escape della stringa di input, prova:

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

In alternativa, puoi utilizzare virgolette doppie senza caratteri di escape all'interno di virgolette singole:

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

È una questione di preferenze che trovi più chiara, sebbene il secondo approccio ti impedisca di annidare il tuo comando all'interno di un altro insieme di virgolette singole (ad esempio ssh 'cmd').


1
funzionerà? echo '"member":"time"' |grep -e "member"non ha testato
formica

Quasi. Deve esserlo echo '"member":"time"' |grep -e 'member"'. Entrambi gli approcci sono validi, ma preferisco l'escape esplicita, poiché l'intento è più chiaro.
cmh

sì, forse modifica la tua risposta se ti piace qualcuno potrebbe preferire questo (+1)
ant

Questo (usando la barra rovesciata) non funziona su Windows per me. In realtà funziona parzialmente, ma non sono in grado di reindirizzare l'output su un file.
Radim Cernej

@RadimCernej Suggerirei di porre una domanda specifica su Windows: sembra fuori dallo scopo di questa.
cmh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.