«Grep» — очень полезная команда Bash для поиска содержимого в файле. Шаблон регулярного выражения можно использовать с командой «grep» для поиска любого конкретного текста в файле. Обычная команда «grep» используется для поиска содержимого в одном файле, но иногда требуется поиск содержимого в нескольких файлах, хранящихся в папке. Рекурсивная команда grep используется для поиска содержимого в каталоге с несколькими файлами. В этой статье показаны методы использования рекурсивного «grep» в Bash.
Синтаксис рекурсивного Grep:
grep -r <pattern> <directory>
Здесь параметр -r используется с командой «grep» для рекурсивного поиска. <шаблон> используется для поиска содержимого в файле определенных каталогов, включая подкаталоги. <directory> используется для определения каталога, который может содержать один или несколько файлов и каталогов. И в этих файлах и файлах подкаталогов ищется <pattern>.
<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: -$
Выполните следующую команду для рекурсивного поиска строки «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: -$
Параметр -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: -$
Команда «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
Символ «^» используется для поиска строки в начале строки файла. Запустите следующую команду, которая ищет строку «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:-$
Символ «$» используется для поиска строки в конце строки файла. Выполните следующую команду, которая ищет во всех текстовых файлах текущего каталога строки, содержащие цифры в конце файла:
$ 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
Диапазон [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» с использованием различных типов параметров и шаблонов.