Используя grep для поиска текстов с одинарной кавычкой?


14

Я использую текстовый редактор Gedit со встроенным терминалом в Ubuntu 12.04. Я пытаюсь найти текст с помощью grep. Я хочу найти эту строку кода

'type' => 'select'

Я старался:

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

Но grepне дал никаких результатов.

Так может кто-нибудь сказать мне, как искать код выше?

Ответы:


17

Окружите строку поиска двойными кавычками:

grep "'type' => 'select'"

7

Вы не можете избежать одинарных кавычек, которые появляются в одинарных кавычках. Как описано в [руководстве по bash] :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Заключение символов в одинарные кавычки ('' ') сохраняет буквальное значение каждого символа в кавычках. Одиночная кавычка может отсутствовать между одинарными кавычками, даже если ей предшествует обратная косая черта .

Итак, вы должны использовать разные подходы:

  1. Используйте двойные кавычки:

    grep  "'type' => 'select'" file 
    
  2. Если вы предпочитаете ненужные сложные решения:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Вы всегда можете искать любой отдельный символ вместо указания одинарных кавычек:

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

Но просто используйте ", это делает вещи намного проще.


Что если искомая строка находится в файле php и содержит переменные? Я действительно борюсь с этим.
Обри Робертсон

@AubreyRobertson Мне нужен пример, чтобы ответить правильно. Если вы хотите найти что-то вроде строки $var, вы можете сделать это grep '$var' file.phpв одинарных кавычках. Для более подробной информации, пожалуйста, оставьте новый вопрос и оставьте мне комментарий здесь. Я был бы рад помочь.
тердон

Я понял. Мой знак grep не испортил знаки доллара, это были ссылки на массивы (квадратные скобки), потому что grep использует их для регулярных выражений. Это строка, которую я пытался понять: $output = $info['function']($variables); мне просто нужно было избежать их с двойной обратной косой чертой. Это моя команда grep после всего сказанного и сделанного:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Обри Робертсон

1

CD в каталог, содержащий файл .txt

cd /path 

Потом :

ты можешь использовать grep "'type' => 'select'" name.txt

или :

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

Выход :

введите описание изображения здесь


3
Вопрос касается только одинарных кавычек, а не структуры каталогов или какой-либо grepдругой (слегка не относящейся к делу) функциональности.
Крис

@Chris, действительно, с -rопцией (как пишет OP), имя файла не обязательно.
Брейди Трейнор
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.