Escape aspas duplas em grep

96

Eu queria fazer grep para palavras-chave com aspas duplas dentro. Para dar um exemplo simples:

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

Isso não combina. Como posso corrigir isso?

Qiang Li
fonte

Respostas:

139

O problema é que você não está escapando corretamente da string de entrada, tente:

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

Como alternativa, você pode usar aspas duplas sem escape entre aspas simples:

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

É uma questão de preferência que você achará mais clara, embora a segunda abordagem evite que você aninhe seu comando em outro conjunto de aspas simples (por exemplo ssh 'cmd').

cmh
fonte
1
Isso vai funcionar ? echo '"member":"time"' |grep -e "member"não testei
formiga
Quase. Precisa ser echo '"member":"time"' |grep -e 'member"'. Ambas as abordagens são válidas, mas eu prefiro o escape explícito, pois a intenção é mais clara.
cmh
Sim, talvez edite sua resposta se você gosta de alguém pode preferir isso (+1)
formiga
Isso (usando barra invertida) não funciona no Windows para mim. Na verdade, funciona parcialmente, mas não consigo redirecionar a saída para um arquivo.
Radim Cernej
@RadimCernej Eu recomendo fazer uma pergunta específica do Windows - parece fora do escopo desta.
cmh