2011-08-04 18 views
6

Próbuję zeskanować dziennik błędów dla linii z błędami 503, więc szukam dla " 503 (wycena miejsca 503).Grep z cudzysłowem

To wydaje się proste, ale to nie będzie działać:

grep '" 503 ' access.log 

pojawia się następujący błąd:

bash: -c: line 0: unexpected EOF while looking for matching `"' bash: -c: line 1: syntax error: unexpected end of file

+1

To powinno zadziałać. Jesteś pewien, że nie pseudo grep czy coś takiego? "który grep"? "typ grep"? – pyroscope

+0

Komunikat o błędzie wyświetla "bash -c", więc czy robisz coś takiego, jak próbować osadzić pojedyncze cudzysłowy wewnątrz pojedynczych cudzysłowów? –

+0

Hmm, działa dla mnie w bashie dokładnie tak, jak go masz –

Odpowiedz

0

Problem był spowodowany błędnymi dyrektywami w .bashrc.

8

Wygląda używasz go przez jakiś system() w jakimś języku, nie jesteś? Spróbuj:

grep '\" 503 ' access.log 

czyli

grep "\" 503 " access.log 

Bezpośrednio w skorupkach tylko grep '" 503 ' access.log zadziała. Aby odtworzyć Twój problem, muszę wykonać:

bash -c 'grep '\" 503 ' access.log' 

Rzeczywiście jest to błąd składniowy. Aby uczynić tę pracę, muszę:

bash -c 'grep "\" 503 " access.log' 

Ty jakoś wywołanie bash -c .... Może pośrednio. Musisz dowiedzieć się, jak to się nazywa, aby dowiedzieć się, jakie cytaty są w kolizji.

+0

Nie, bezpośrednio w powłoce. Wypróbowałem oba przykłady, które sugerujesz bez powodzenia. – dtbarne

+0

to dziwne. Czy możesz wysłać wynik "grep" i "echo 0 $"? –

1

Aby debugować dziwne efekty w ten sposób, użyj polecenia "set -x", aby wyświetlić rozszerzenia powłoki i to, co komputer myśli o twoim poleceniu.

0

Wierzę, że mam to teraz działa (nie jestem pewien, bo nie mam wyników, ale nie dostałem błędu).

Powodem jest to, ponieważ jestem przepuszczenie go przez polecenie ssh jak poniżej i wierzę SSH robi pewne sztuczki ucieczki:

ssh 123.123.123.123 grep '" 503 ' access.log 

modyfikujących je Wydaje się to być poprawka:

ssh 123.123.123.123 "grep '\" 503 ' access.log" 

Dzięki za czas dla wszystkich.

+2

To nie ssh robi sztuczkę, to jest muszla. Twoja lokalna powłoka interpretuje pojedyncze cudzysłowy i usuwa je z argumentu '' '503' ', a następnie przekazuje te argumenty do ssh. Ssh, a następnie przekazuje argumenty, które otrzymał, niezmienione, do powłoki w systemie zdalnym. niedopasowany znak podwójnego cudzysłowu. (Jest prawdopodobnie trochę więcej niż to, ale taki jest ogólny pomysł.) –

+0

@Keith ma dokładnie rację.Ponieważ twoje polecenie zostanie zinterpretowane dwa razy (raz przez lokalną powłokę i po raz drugi przez zdalną powłokę), wszystko, co normalnie musi być cytowane raz, musi być zamiast tego cytowane dwukrotnie. – jw013

+0

Dzięki, wiedziałem o tym. Po prostu łatwiej było nazwać to oszustwem. :) – dtbarne