Підручник з команд Grep - Як шукати файл у Linux та Unix за допомогою рекурсивного пошуку

grepрозшифровується як Глобальний пошук регулярних виразів та роздрукувати . Це інструмент командного рядка, який використовується в системах UNIX та Linux для пошуку за вказаним шаблоном у файлі чи групі файлів.

grepпоставляється з великою кількістю опцій, які дозволяють нам виконувати різні дії, пов’язані з пошуком файлів. У цій статті ми розглянемо, як використовувати grepз доступними опціями, а також базовими регулярними виразами для пошуку файлів.

Як користуватись grep

Не передаючи жодної опції, grepможе використовуватися для пошуку шаблону у файлі або групі файлів. Синтаксис:

grep ''  

Зверніть увагу, що навколо тексту потрібні одинарні або подвійні лапки, якщо це більше одного слова.

Ви також можете використовувати підстановочний знак (*), щоб виділити всі файли в каталозі.

Результатом цього є поява шаблону (за рядком, який він знайдений) у файлі (файлах). Якщо збігу немає, на терміналі не буде надруковано вихід.

Наприклад, скажімо, що ми маємо такі файли (які називаються grep.txt):

Hello, how are you I am grep Nice to meet you 

Наступна grepкоманда буде шукати всі випадки слова "ти":

grep you grep.txt 

Результатом цього є:

Hello, how are you Nice to meet you 

you очікується, що колір буде відрізнятися від тексту, щоб легко визначити, що шукали.

Але ми grepпропонуємо більше опцій, які допомагають нам досягти більшого під час пошукової операції. Давайте розглянемо дев’ять із них, застосовуючи їх до прикладу вище.

Параметри, що використовуються з grep

1. -n(--line-number) - перелічити номери рядків

Це друкує відповідність тексту разом із номерами рядків. Якщо ви подивитесь на результат, який ми маємо вище, ви помітите, що немає номерів рядків, а лише збіги.

grep you grep.txt -n 

Результат:

1: Hello, how are you 3: Nice to meet you 

2. -c(--count) - друкує кількість рядків збігів

grep you grep.txt -c 

Результат:

2 

Зверніть увагу, що якби на першому рядку було інше "ти", варіант -cвсе одно друкував би 2. Це пояснюється тим, що він стосується кількості рядків, де відображаються збіги, а не кількості збігів.

3. -v(--invert-match) - друкує рядки, які не відповідають вказаному шаблону

grep you grep.txt -v -n 

Результат:

2. I am grep 

Зверніть увагу, що ми також використовували опцію -n? Так, ви можете застосувати декілька варіантів в одній команді.

4. -i(--ignore-case) - використовується для нечутливості до регістру

# command 1 grep You grep.txt # command 2 grep YoU grep.txt -i 

Результати:

# result 1 # no result # result 2 Hello, how are you Nice to meet you 

5. -l(--files-with-match) - друк назв файлів, що відповідають шаблону

# command 1 grep you grep.txt -l # command 2 grep You grep.txt -i -l 

Результати:

# result 1 grep.txt # result 2 # all files in the current directory that matches # the text 'You' case insensitively 
#### 6. `-w` (--word-regexp) - print matches of the whole word 

За замовчуванням grepвідповідає рядкам, які містять зазначений шаблон. Це означає, що grep yo grep.txtбудуть надруковані ті самі результати, що й grep yo grep.txtтому, що у вас можна знайти слово «йо». Подібним чином, "оу".

За допомогою опції -w, grepгарантує , що матчі точно по тій же схемі , як зазначено. Приклад:

grep yo grep.txt -w 

Результат:

Результату немає!

7. -o(--lyly-matching) - надрукуйте лише відповідний шаблон

За замовчуванням grepдрукує рядок, де знайдений відповідний шаблон. З додатковою опцією -o, лише відповідний візерунок друкується рядок за рядком. Приклад:

grep yo grep.txt -o 

Результат:

yo 

8. -A(--after-context) та -B(--before-context) - надрукуйте рядки після і перед (відповідно) відповідним шаблоном

grep grep grep.txt -A 1 -B 1 

Результат:

Hello, how are you I am grep Nice to meet you 

Цей узгоджений шаблон знаходиться на рядку 2. -A 1означає один рядок після відповідного рядка і -B 1означає один рядок перед відповідним рядком.

Існує також параметр -C(--context), який дорівнює -A+ -B. Значення, передане в -C, буде використовуватися для -Aі -B.

9. -R(--dereference-рекурсивний) - рекурсивний пошук

За замовчуванням grepне може шукати каталоги. Якщо ви спробуєте це зробити, ви отримаєте повідомлення про помилку ("Це каталог"). За допомогою опції -Rстає можливим пошук файлів у каталогах та підкаталогах. Приклад:

grep you . 

Результат:

# 'you' matches in a folders # and files starting from the # current directory 

Регулярні вирази для шаблонів

grepтакож дозволяє основні регулярні вирази для зазначення шаблонів. Два з них:

1. ^pattern- початок рядка

Цей шаблон означає, що параметр grepбуде відповідати рядкам, рядки яких починаються з рядка, вказаного після ^. Приклад:

grep ^I grep.txt -n 

Результат:

2: I 

2. pattern$- кінець рядка

На відміну від ^, $вказує шаблони, які будуть узгоджені, якщо рядок закінчується рядком раніше $. Приклад:

grep you$ grep.txt 

Результат:

1: Hello, how are you 3: Nice to meet you 

Загорнути

grepце потужний інструмент для пошуку файлів у терміналі. Розуміння того, як ним користуватися, дає можливість легко знаходити файли через термінал.

До цього інструменту додано більше варіантів. Ви можете знайти за допомогою man grep.