Unikaj podwójnego cudzysłowu w grep

91

Chciałem zrobić grep dla słów kluczowych z podwójnymi cudzysłowami. Oto prosty przykład:

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

To nie pasuje. Jak mogę to naprawić?

Qiang Li
źródło

Odpowiedzi:

133

Problem polega na tym, że nie wykonujesz poprawnej ucieczki z ciągu wejściowego, spróbuj:

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

Alternatywnie możesz użyć cudzysłowów bez zmiany znaczenia w apostrofach:

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

Jest to kwestia preferencji, którą uważasz za jaśniejszą, chociaż drugie podejście zapobiega zagnieżdżaniu polecenia w innym zestawie pojedynczych cudzysłowów (np ssh 'cmd'.).

cmh
źródło
1
Czy to zadziała ? echo '"member":"time"' |grep -e "member"nie testowałem
mrówka
Prawie. Musi być echo '"member":"time"' |grep -e 'member"'. Oba podejścia są prawidłowe, ale wolę jawną ucieczkę, ponieważ zamiar jest bardziej jasny.
cmh
Tak, może zmieniać swoją odpowiedź, czy może jak ktoś preferuje ten (+1)
mrówka
To (używając odwrotnego ukośnika) nie działa w systemie Windows dla mnie. Właściwie to częściowo działa, ale nie jestem w stanie przekierować wyjścia do pliku.
Radim Cernej
@RadimCernej Poleciłbym zadać konkretne pytanie dotyczące systemu Windows - wydaje się poza zakresem tego.
cmh