É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?

Qiang Li
la source

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').

cmh
la source
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