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?

Odpowiedzi:


17

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

grep "'type' => 'select'"

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.


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


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