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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.