ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как использовать рекурсивную команду Grep для поиска в каталоге

Как использовать рекурсивную команду Grep для поиска в каталоге

«Grep» — очень полезная команда Bash для поиска содержимого в файле. Шаблон регулярного выражения можно использовать с командой «grep» для поиска любого конкретного текста в файле. Обычная команда «grep» используется для поиска содержимого в одном файле, но иногда требуется поиск содержимого в нескольких файлах, хранящихся в папке. Рекурсивная команда grep используется для поиска содержимого в каталоге с несколькими файлами. В этой статье показаны методы использования рекурсивного «grep» в Bash.

Синтаксис рекурсивного Grep:

grep -r <pattern> <directory>

 

Здесь параметр -r используется с командой «grep» для рекурсивного поиска. <шаблон> используется для поиска содержимого в файле определенных каталогов, включая подкаталоги. <directory> используется для определения каталога, который может содержать один или несколько файлов и каталогов. И в этих файлах и файлах подкаталогов ищется <pattern>.

 

Пример 1: Простое использование «Grep»

<pattern> команды «grep» может быть простой строкой или шаблоном регулярного выражения. Выполните следующие команды, чтобы проверить содержимое файла «sales.txt» и найти строку «Feb» в файле текущего каталога:

$ cat sales.txt

$ grep 'Feb' *

 

Согласно следующему выводу, строка «Feb» существует во второй строке файла «sales.txt». Вывод команды «grep» показывает, что строка поиска находится в файле «sales.txt».

andreyex@andreyex:-$ cat sales.txt
Jan: 55000
Feb: 25000
Mar: 58000
Apr: 44000
May: 23000
Jun: 98000
andreyex@andreyex: $ grep 'Feb' sales.txt: Feb: 44000
grep: temp: Is a directory
grep: tempdir: Is a directory
grep: test: Is a directory
andreyex@andreyex: -$

 

Пример 2: Использование команды «Grep» с параметром -R и флагом –Exclude-Dir

Выполните следующую команду для рекурсивного поиска строки «CSE», исключив временный каталог:

$ grep -r 'CSE*' --exclude-dir= "temp"

 

Согласно следующему выводу, строка «CSE» существует в трех строках файла «sales.txt» временной папки:

andreyex@andreyex: -5 grep -r 'CSE
exclude-dir= " -"temp"
tmp/courses.txt: CSE202 2.0
temp/courses.txt: CSE407
1.0
temp/courses.txt:CSE305
3.0
andreyex@andreyex: -$

 

Пример 3: Использование команды «Grep» с параметром -R

Параметр -R используется с командой «grep» для поиска содержимого в файле и символической ссылки на файл. Выполните следующую команду для поиска строки «sleep» во всех файлах и символических ссылках файлов текущих каталогов и подкаталогов:

$ grep -R 'sleep' *

 

Следующий вывод показывает результат поиска «спящей» строки в текущем каталоге. В выводе содержится один файл символической ссылки с именем «sleeplink.bash». Остальные три файла — «sleep1.bash», «sleep2.bash» и «sleep3.bas»:

andreyex@andreyex:-$ grep -R 'sleep'
sleep 2
sleep2.bash: #Display the line of text using 'sleep" command
sleep2.bash:echo -n 'D'; sleep 0.5s
sleep2.bash: echo -n '
sleep 0.5s
sleep2.bash:echo -n 'g'; sleep 0.5s
sleep2.bash:echo -n 'i'; sleep 0.5s leep2.bash: echo - sleep 0.5s sleep2.bash:echo -n 'a'; sleep 0.5s sleep2.bash: echo -n '1'; sleep 0.5s leep2.bash:echo -nsleep 0.5s sleep2.bash;echo -n 'C'; sleep 0.5s sleep2.bash:echo -n 'l'; sleep 0.5s leep2.bash:echo -n 'o'; sleep 0.5s
sleep2.bash: echo -n 'c'; sleep 0.5s
sleep2.bash:sleep 3s; clear
sleep2. bash: sleep 1s
sleep3.bash:sleep $alarm_time && nvlc /mnt/c/temp/alarm.mp3 sleeplink.bash: sleep $alarm_time && nvlc /mnt/c/temp/alarm.mp3 andreyex@andreyex: -$

 

Пример 4: Использование команды «Grep» с параметром -I

Команда «grep» ищет строковое значение с учетом регистра. Параметр -i используется с командой «grep» для поиска содержимого в файле без учета регистра. Выполните следующую команду для поиска строки «Credit» во всех файлах текущих каталогов и подкаталогов:

$ grep -i 'Credit' *

 

Согласно выходным данным, строка «credit» существует в двух местах файла «sum1.bash». Строка поиска — «Credit», и она совпадает со строкой «credit» для использования опции -i:

andreyex@andreyex: -$ grep -i 'Credit'
suml.bash:#Calculate the sum of total credit hours
sumi.bash:total="cat $filename | awk "(sum+=$2) END (print "Total course credit hours: " sum)"
grep: temp: Is a directory
grep: tempdir: Is a directory
grep: test: Is a directory
andreyex@andreyex: -S

 

Пример 5: Использование команды «Grep» с символом «^»

Символ «^» используется для поиска строки в начале строки файла. Запустите следующую команду, которая ищет строку «printf» во всех файлах Bash текущего каталога:

$ grep '^printf' *.bash

 

Согласно выводу, строка «printf» существует в одном месте файла «namedarg3.bash»:

andreyex@andreyex:-$ grep "*printf" ".bash 
mamedarg3.bash: printf " f "username: $User \npassword: $Password \nhostname: $Host\n" 
andreyex@andreyex:-$

 

Пример 6: Использование команды «Grep» с символом «$»

Символ «$» используется для поиска строки в конце строки файла. Выполните следующую команду, которая ищет во всех текстовых файлах текущего каталога строки, содержащие цифры в конце файла:

$ grep '[0-9]$' *.txt

 

Согласно выводу, три файла содержат числовые значения в конце строк. Это «courses.txt», «employees.txt» и «sales.txt»:

andreyex@andreyex:-$ grep "[0-9]$txt
courses.txt: CSE202
2.0
courses.txt: CSE407
1.0
courses.txt: CSE305
3.0
courses.txt: ACC101
2.0
employees.txt: 5623 amployees.txt: 1355
Andreyex Destroyer
Alex Term
90000
125003
employees.txt: 3517
Max Fax
300000
employees.txt: 7554
Anna Karenina
450000
mployees.txt: 8652 sales.txt:Jan: 60000 sales.txt: Feb: 34000 ales.txt: Mar: 120000 sales.txt: Apr: 56000 sales. txt: May: 65000 sales.txt:Jun:20000 andreyex@andreyex:-$
Ivan Dolgov
260000

 

Пример 7: Использование команды «Grep» с классом диапазона [0-9]

Диапазон [0-9] используется для определения всех чисел, содержащих любую цифру от 0 до 9. Выполните следующую команду, которая ищет строки во всех текстовых файлах текущего каталога, которые содержат строку «CSE» и любую цифру в файлы текущего каталога:

$ grep 'CSE[0-9]' *.txt

 

Согласно выводу, файл с именем «courses.txt» текущей директории содержит «CSE» с цифрами в три строки:

andreyex@andreyex: -$ grep 'CSE[0-9]' ".txt courses.tat: CSE202
2.0
courses.txt: CSE407
1.0
courses.txt:CSE305
3.0
andreyex@andreyex: -5

 

Заключение

Команда «grep» в основном используется для поиска в определенном файле, но рекурсивная «grep» используется для рекурсивного поиска в нескольких файлах каталога. Таким образом, рекурсивный «grep» более эффективен для глубокого поиска. В этой статье показано использование рекурсивного «grep» с использованием различных типов параметров и шаблонов.

Exit mobile version