Używasz grep do wyszukiwania tekstu za pomocą pojedynczego cudzysłowu?

14

Korzystam z edytora tekstu gedit z wbudowanym terminalem w Ubuntu 12.04. Próbuję wyszukać tekst za pomocą grep. Chcę wyszukać ten wiersz kodu

'type' => 'select'

Próbowałem:

grep -r '\'type\' => \'select\''

Ale grepnie zwrócił żadnych wyników.

Czy ktoś może mi powiedzieć, jak wyszukać powyższy kod?

nowy użytkownik
źródło

Odpowiedzi:

17

Otacz swój ciąg wyszukiwania podwójnymi cudzysłowami:

grep "'type' => 'select'"
Chris
źródło
7

Nie można uniknąć pojedynczych cudzysłowów pojawiających się w pojedynczych cudzysłowach. Jak wyjaśniono w [podręczniku bash] :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Umieszczanie znaków w pojedynczych cudzysłowach („”) zachowuje dosłowną wartość każdego znaku w cudzysłowie. Pojedynczy cytat może nie wystąpić między pojedynczymi cudzysłowami, nawet jeśli poprzedzony jest odwrotnym ukośnikiem .

Musisz więc zastosować różne podejścia:

  1. Użyj podwójnych cudzysłowów:

    grep  "'type' => 'select'" file 
    
  2. Jeśli wolisz niepotrzebnie złożone rozwiązania:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Zawsze możesz wyszukać dowolny pojedynczy znak zamiast pojedynczych cudzysłowów:

    grep  '.type. => .select.' file 
    

Ale po prostu użyj ", dzięki temu wszystko stanie się prostsze.

terdon
źródło
Co jeśli szukany ciąg znajduje się w pliku php i zawiera zmienne? Naprawdę mam z tym problem.
Aubrey Robertson,
@AubreyRobertson Potrzebuję przykładu, aby odpowiedzieć poprawnie. Jeśli chcesz znaleźć coś takiego jak ciąg $var, możesz to zrobić grep '$var' file.phpw pojedynczym cudzysłowie. Aby uzyskać więcej informacji, proszę opublikować nowe pytanie i zostawić komentarz tutaj. Chętnie pomogę.
terdon
Rozgryzłem to. To nie znaki dolara dręczyły mój grep, to odwołania do tablic (nawiasy kwadratowe), ponieważ grep używa tych wyrażeń regularnych. Oto linia, którą starałem się grepować: $output = $info['function']($variables); po prostu musiałem odpowiednio uciec przed nimi podwójnym ukośnikiem. Oto moje polecenie grep po tym, jak wszystko zostało powiedziane i zrobione:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson
1

cd do katalogu zawierającego plik .txt

cd /path 

Następnie :

możesz użyć grep "'type' => 'select'" name.txt

lub:

`grep "'type' => 'select'" /path/file.txt

Wynik :

wprowadź opis zdjęcia tutaj

nux
źródło
3
Pytanie dotyczy tylko pojedynczych cudzysłowów, a nie struktury katalogów lub jakiejkolwiek grepinnej (nieco nieistotnej) funkcjonalności.
Chris
@Chris, z -ropcją (jak pisze OP), nazwa pliku nie jest konieczna.
Brady Trainor