Échapper aux guillemets doubles dans grep


91

Je voulais faire grep pour les mots-clés avec des guillemets doubles à l'intérieur. Pour donner un exemple simple:

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

Cela ne correspond pas. Comment puis-je y remédier?

Réponses:


133

Le problème est que vous n'échappez pas correctement la chaîne d'entrée, essayez:

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

Vous pouvez également utiliser des guillemets doubles non échappés entre guillemets simples:

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

C'est une question de préférence que vous trouvez plus claire, bien que la deuxième approche vous empêche d'imbriquer votre commande dans un autre ensemble de guillemets simples (par exemple ssh 'cmd').


1
Est-ce que ça va marcher ? echo '"member":"time"' |grep -e "member"n'a pas testé
fourmi

Presque. Cela doit l'être echo '"member":"time"' |grep -e 'member"'. Les deux approches sont valides, mais je préfère l'échappement explicite, car l'intention est plus claire.
cmh

oui, peut-être modifier votre réponse si vous aimez quelqu'un pourrait préférer ceci (+1)
fourmi

Cela (en utilisant une barre oblique inverse) ne fonctionne pas sous Windows pour moi. En fait, cela fonctionne partiellement, mais je ne peux pas rediriger la sortie vers un fichier.
Radim Cernej

@RadimCernej Je recommanderais de poser une question spécifique à Windows - cela semble hors du cadre de celui-ci.
cmh
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.