**103.7** Поиск информации при помощи регулярных выражений

Студент должен уметь осуществлять поиск необходимых файлов и информации внутри них.

**Изучаем** :

- создание простых регулярных выражений;
- инструменты, опирающиеся на эти выражения, для поиска файлов.

**Термины и утилиты:       **

- grep
- egrep
- fgrep
- rgrep
- sed
- регулярные выражения.

Частой задачей в Linux является поиск необходимых файлов и сортировка информации внутри них. Для этой задачи служат регулярные выражения – специальный язык поиска и изменения информации, обладающий своим синтаксисом.

При отборе информации можно использовать стандартные групповые символы:

- **^** _                - начало строки;_
- **$       ** _        - конец строки;_
- **.       ** _        - любой символ;_
- **\&lt;**** a ****               ** _- слово, начинающееся с &quot; __a__&quot;;_
- **\&gt;**** a ****               ** _-_ _c __лово, заканчивающееся на &quot;__ a__&quot;;_
- **a**** - ****z**** ]                **** -** _диапазон от &quot; __a__&quot; до &quot; __z__&quot;;_
- **[^t]****                **** -** _не буква &quot; __t__&quot;;_
- **a|z****                 **** -** _&quot; __a__&quot; __или &quot;__ z __&quot;__ ;_
- и т.д.;

Для простой сортировки набора строк используется команда **grep** , например:

**grep**** oo ****file****. ****txt**  _(отобразить в файле текст с двумя буквы « __o__ » подряд);_

**ls**  **|**  **grep**** ile**   _(вывести названия содержимого каталога с набором символов &#39; __ile__&#39;);_

**grep**** ple ****$**  **file****. ****txt**   _(отобразить в файле_ _file __.__ txt_ _строки, заканчивающиеся на &#39; __ple__&#39;);_

Для расширенной сортировки и поиска по сложным регулярным выражениям используется команда **egrep** (также можно использовать **grep**  **-**** E**), например:

**egrep** **&#39;^(****b ****|**** d****)&#39;**  **file****. ****txt**  _(все строки, что начинаются с &quot; __b__&quot; или &quot; __d__&quot;);_

**egrep** **&#39;^[****a ****-**** k****]&#39;**  **file****. ****txt**   _(все строки, что начинаются с &quot; __a__&quot; по &quot; __k__&quot;);_

Для быстрой сортировки и поиска по набору символов без регулярных выражений используется команда **fgrep** (также можно использовать **grep**  **-**** F**), например:

**fgrep**** c ****$**  **file****. ****txt** _ (отобразить в_ _file __.__ txt_ _последовательность символов &quot; __c__ $&quot;);_

Для рекурсивной (включая вложенные каталоги и файлы) сортировки и поиска по набору символов используется команда **rgrep** (также можно использовать **grep**  **-**** R**), например:

**rgrep**  ** **** word**_ (вывести позиции содержащие « __word__ » в текущем и всех вложенных каталогах__);_

Для изменения текстового потока согласно заданным правилам используется редактор sed, например:

**sed**  **–**** e ****&#39; ****s**** / ****oo**** / ****aa**** /&#39;   ****file****. ****txt**  _(заменить в_ _file __.__ txt_ _все &quot; __oo__&quot; на &quot; __aa__&quot; );_

**sed**  **–**** re ****&#39; ****s**** /^( ****B**** | ****b**** )/ ****C****&#39; ****file****. ****txt**  **&gt;**  **newfile****. ****txt** _(в строках, начинающихся с « __B__ » или « __b__ », заменить первую букву на «С» и сохранить результат в_ _newfile __.__ txt__);_