Використовуйте 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 використовує їх для регулярного вираження. Це рядок, який я намагався зірвати: $output = $info['function']($variables); мені просто довелося уникнути їх належним чином з подвійним нахилом. Це моя грецька команда після всього сказаного і зробленого: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опцією (як пише ОП) назва файлу не потрібна.
Brady Trainor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.