| 
Следующая версия
 | 
                    Предыдущая версия
 | 
                
                        
                
                    grep [2013/05/22 12:23] 46.231.215.230 создано                 | 
                
                    grep [2013/05/22 16:29] (текущий)                   | 
            
        
| В своей основе grep предельно прост. Если вам нужно поискать что-то по шаблону в файле, воспользуйтесь командой: | В своей основе grep предельно прост. Если вам нужно поискать что-то по шаблону в файле, воспользуйтесь командой: | 
 |  | 
| grep шаблон путь_к_файлу  |   grep шаблон путь_к_файлу  | 
| 1 |  | 
| 	 | 	 | 
| grep шаблон путь_к_файлу |   | 
 |   | 
| Эта команда выполнит поиск по шаблону в указанном файле и выведет в стандартный поток вывода строки файла, искомый шаблон содержащие. | Эта команда выполнит поиск по шаблону в указанном файле и выведет в стандартный поток вывода строки файла, искомый шаблон содержащие. | 
 |  | 
| Существует также очень распространённое применение grep — фильтрация потока вывода других программ. Давайте представим, например, что вам нужно получить список всех файлов, которые устанавливаются из пакета в каталог /usr/bin. В Debian-системах попробуйте команду: | Существует также очень распространённое применение grep — фильтрация потока вывода других программ. Давайте представим, например, что вам нужно получить список всех файлов, которые устанавливаются из пакета в каталог /usr/bin. В Debian-системах попробуйте команду: | 
 |  | 
| dpkg-query -L packagename | grep "/usr/bin"  |   dpkg-query -L packagename | grep "/usr/bin"  | 
| 1  |  | 
| 	  |  | 
| dpkg-query -L packagename | grep "/usr/bin" |  | 
 |  | 
| Для систем с RPM команда будет выглядеть так: | Для систем с RPM команда будет выглядеть так: | 
 |  | 
| rpm -q --filesbypkg packagename | grep "/usr/bin"  |  | 
| 1 |  | 
| 	 | 	 | 
| rpm -q --filesbypkg packagename | grep "/usr/bin" |   rpm -q --filesbypkg packagename | grep "/usr/bin" | 
 |  | 
| Таким образом, вместо вывода полного списка всех файлов пакета, вы получите только те, которые предназначены для установки в каталог /usr/bin. Вы можете пойти дальше, и при помощи следующего перенаправления в grep, сузить результаты фильтрации. | Таким образом, вместо вывода полного списка всех файлов пакета, вы получите только те, которые предназначены для установки в каталог /usr/bin. Вы можете пойти дальше, и при помощи следующего перенаправления в grep, сузить результаты фильтрации. | 
| Выполняя поиск в файлах, grep умеет работать рекурсивно. Чтобы заставить grep работать таким образом, используйте опцию «-r». А по умолчанию grep будет искать только в файлах, находящихся в текущем каталоге. Таким образом, если вы запустите что-то вроде | Выполняя поиск в файлах, grep умеет работать рекурсивно. Чтобы заставить grep работать таким образом, используйте опцию «-r». А по умолчанию grep будет искать только в файлах, находящихся в текущем каталоге. Таким образом, если вы запустите что-то вроде | 
 |  | 
| grep шаблон *  |  | 
| 1 |  | 
| 	 | 	 | 
| grep шаблон * |   grep шаблон * | 
 |  | 
| то grep будет искать только в файлах, находящихся в текущем каталоге, находясь в котором вы запустили команду. | то grep будет искать только в файлах, находящихся в текущем каталоге, находясь в котором вы запустили команду. | 
| Но если вы запустите | Но если вы запустите | 
 |  | 
| grep -r шаблон *  |     | 
| 1 |   | 
| 	 | 	 | 
| grep -r шаблон * |   grep -r шаблон * | 
 |  | 
| то grep заботливо обойдёт все вложенные подкаталоги и поищет шаблон в файлах найденных подкаталогов. | то grep заботливо обойдёт все вложенные подкаталоги и поищет шаблон в файлах найденных подкаталогов. | 
| Само собой, вы можете комбинировать опции. Например, чтобы найти файлы, не содержащие строк, соответствующих шаблону можно использовать | Само собой, вы можете комбинировать опции. Например, чтобы найти файлы, не содержащие строк, соответствующих шаблону можно использовать | 
 |  | 
| grep -v -l pattern * |   | 
| 1 |   | 
| 	 | 	 | 
| grep -v -l pattern * |   grep -v -l pattern * | 
 |  | 
| Вам не нужны имена файлов в выводе grep, а интересны лишь строки — воспользуйтесь опцией «-h» и grep не будет выводить имена файлов. | Вам не нужны имена файлов в выводе grep, а интересны лишь строки — воспользуйтесь опцией «-h» и grep не будет выводить имена файлов. | 
| Используя эти опции, необходимо указать саму опцию и целое число, определяющее количество строк для вывода. Например | Используя эти опции, необходимо указать саму опцию и целое число, определяющее количество строк для вывода. Например | 
 |  | 
| grep -C 2 pattern files |   | 
| 1 |   | 
| 	 |   | 
| grep -C 2 pattern files |   | 
 |  | 
|   | 	 | 
|   |   grep -C 2 pattern files | 
|   |   | 
| выведет строки, в которых найдено соответствие, плюс 2 строки до 2 после каждой найденной. | выведет строки, в которых найдено соответствие, плюс 2 строки до 2 после каждой найденной. | 
| Регулярные выражения | Регулярные выражения | 
| Давайте немного рассмотрим регулярные выражения, которые, вероятно, вам пригодятся. В командной оболочке символ звёздочки «*» соответствует любому символу ноль или более раз. В grep символ «*» имеет несколько иное значение. В grep этот символ необходимо группировать с другими. Например, если вам нужен тот же эффект, как и в оболочке, используйте следующее: | Давайте немного рассмотрим регулярные выражения, которые, вероятно, вам пригодятся. В командной оболочке символ звёздочки «*» соответствует любому символу ноль или более раз. В grep символ «*» имеет несколько иное значение. В grep этот символ необходимо группировать с другими. Например, если вам нужен тот же эффект, как и в оболочке, используйте следующее: | 
 |  | 
| grep '.*' pattern files  |  | 
| 1 |  | 
| 	 | 	 | 
| grep '.*' pattern files |   grep '.*' pattern files | 
 |  | 
| Если вам необходимо определить какой-то шаблон один и более раз, вы можете использовать конструкцию «+шаблон». | Если вам необходимо определить какой-то шаблон один и более раз, вы можете использовать конструкцию «+шаблон». | 
| Символ «^» соответствует началу строки, а символ «$» — её концу. Например, вы хотите найти все файлы с расширением «.html», но вам не нужны файлы с расширением «.html.bak»: | Символ «^» соответствует началу строки, а символ «$» — её концу. Например, вы хотите найти все файлы с расширением «.html», но вам не нужны файлы с расширением «.html.bak»: | 
 |  | 
| ls | grep '.*html$'  |   ls | grep '.*html$'  | 
| 1 |  | 
| 	 | 	 | 
| ls | grep '.*html$' |  | 
 |  | 
| Если вам необходимо, чтобы grep интерпретировала спецсивмолы как обычные — предварите их обратным слешем. Например | Если вам необходимо, чтобы grep интерпретировала спецсивмолы как обычные — предварите их обратным слешем. Например | 
 |  | 
| grep '\*' filename |   | 
| 1 |   | 
| 	 | 	 | 
| grep '\*' filename |   grep '\*' filename | 
 |  | 
| будет искать строки, содержащие символ звёздочки в filename. | будет искать строки, содержащие символ звёздочки в filename. | 
| В выражениях можно использовать диапазоны и классы символов. Для этого при составлении шаблона в grep используются квадратные скобки. Например, символу в диапазоне от A до Z будет соответствовать шаблон [A-Z]"", а любой цифре — [0-9]"". Также, используя квадратные скобки вы можете определять соответствие классам символов. Например, [:punct:]"" будет соответствовать любому знаку препинания. Например, чтобы найти строки, содержащие знаки препинания в конце, можно использовать следующую команду: | В выражениях можно использовать диапазоны и классы символов. Для этого при составлении шаблона в grep используются квадратные скобки. Например, символу в диапазоне от A до Z будет соответствовать шаблон [A-Z]"", а любой цифре — [0-9]"". Также, используя квадратные скобки вы можете определять соответствие классам символов. Например, [:punct:]"" будет соответствовать любому знаку препинания. Например, чтобы найти строки, содержащие знаки препинания в конце, можно использовать следующую команду: | 
 |  | 
| grep '[[:punct:]]$' files  |  | 
| 1 |  | 
| 	 | 	 | 
| grep '[[:punct:]]$' files |   grep '[[:punct:]]$' files | 
 |  | 
| Обратите внимание на двойные скобки. Вообще, об использовании регулярных выражений в grep лучше всего проконсультируйтесь с её man-страницей. Поначалу, понимание того, что написано там, может даваться вам с некоторым трудом, однако не поленитесь, и вы сможете овладеть мощным инструментом — регулярными выражениями. | Обратите внимание на двойные скобки. Вообще, об использовании регулярных выражений в grep лучше всего проконсультируйтесь с её man-страницей. Поначалу, понимание того, что написано там, может даваться вам с некоторым трудом, однако не поленитесь, и вы сможете овладеть мощным инструментом — регулярными выражениями. |