<Попередній | зміст | Наступна>
GREP
Основна програма, яку ми будемо використовувати для роботи з регулярними виразами, це наш старий приятель, GREP. Назва «grep» насправді походить від фрази «друк глобального регулярного виразу», тому ми бачимо це GREP має якесь відношення до регулярних виразів. По суті, GREP шукає в текстових файлах текст входження, що відповідає заданому регулярному виразу, і виводить будь-який рядок, що містить відповідність, до стандартного виводу.
Поки що ми користувалися GREP з фіксованими рядками, наприклад:
[me@linuxbox ~]$ ls /usr/bin | grep zip
[me@linuxbox ~]$ ls /usr/bin | grep zip
Це покаже список усіх файлів у файлі / usr / bin каталог, імена якого містять підрядок “zip”.
Команда GREP програма приймає параметри та аргументи таким чином:
grep [опції] regex [файл ...]
де regex є регулярним виразом.
Ось список часто використовуваних GREP опції:
Таблиця 19-1: Параметри grep
Опція Опис
Опція Опис
-i Ігнорувати регістр. Не розрізняйте символи верхнього та малого регістру. Також може бути вказано --ігнорувати регістр.
-v Інвертувати відповідність. зазвичай, GREP друкує рядки, які містять відповідність.
Цей варіант викликає GREP щоб надрукувати кожен рядок, який не містить збігу. Також може бути вказано --invert-match.
-c Надрукуйте кількість збігів (або невідповідностей, якщо -v також вказано параметр) замість самих рядків. Також може бути вказано --рахувати.
-l Надрукуйте назву кожного файлу, який містить відповідність, а не самі рядки. Також може бути вказано --файли-зі збігами.
-L Як і параметр -l, але друкуйте лише імена файлів, які не містять збігів. Також може бути вказано --files-without- match.
-n Поставте префікс до кожного відповідного рядка номером рядка у файлі. Також може бути вказаний --line-number.
-h Для пошуку в кількох файлах придушіть вихід імен файлів. Також може бути вказано --без імені файлу.
Для більш повного вивчення GREP, давайте створимо кілька текстових файлів для пошуку:
GREP
[me@linuxbox ~]$ ls /bin > dirlist-bin.txt [me@linuxbox ~]$ ls /usr/bin > dirlist-usr-bin.txt [me@linuxbox ~]$ ls /sbin > dirlist-sbin.txt [me@linuxbox ~]$ ls /usr/sbin > dirlist-usr-sbin.txt [me@linuxbox ~]$ ls dirlist*.txt
dirlist-bin.txt dirlist-sbin.txt dirlist-usr-sbin.txt dirlist-usr-bin.txt
[me@linuxbox ~]$ ls /bin > dirlist-bin.txt [me@linuxbox ~]$ ls /usr/bin > dirlist-usr-bin.txt [me@linuxbox ~]$ ls /sbin > dirlist-sbin.txt [me@linuxbox ~]$ ls /usr/sbin > dirlist-usr-sbin.txt [me@linuxbox ~]$ ls dirlist*.txt
dirlist-bin.txt dirlist-sbin.txt dirlist-usr-sbin.txt dirlist-usr-bin.txt
Ми можемо виконати простий пошук нашого списку файлів, як це:
[me@linuxbox ~]$ grep bzip dirlist*.txt
dirlist-bin.txt:bzip2 dirlist-bin.txt:bzip2recover
[me@linuxbox ~]$ grep bzip dirlist*.txt
dirlist-bin.txt:bzip2 dirlist-bin.txt:bzip2recover
У цьому прикладі GREP шукає рядок у всіх перерахованих файлах bzip і знаходить два збіги, обидва у файлі dirlist-bin.txt. Якби нас цікавив лише список файлів, які містять збіги, а не самі збіги, ми могли б вказати -l опції:
[me@linuxbox ~]$ grep -l bzip dirlist*.txt
dirlist-bin.txt
[me@linuxbox ~]$ grep -l bzip dirlist*.txt
dirlist-bin.txt
І навпаки, якби ми хотіли лише побачити список файлів, які не містять збігів, ми могли б зробити це:
[me@linuxbox ~]$ grep -L bzip dirlist*.txt
dirlist-sbin.txt dirlist-usr-bin.txt dirlist-usr-sbin.txt
[me@linuxbox ~]$ grep -L bzip dirlist*.txt
dirlist-sbin.txt dirlist-usr-bin.txt dirlist-usr-sbin.txt