training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Поиск по файлам и папкам grep BASH

Создано: 15 февраля 2017Автор: Егор Астапов10482 просмотраСложность: легкий

Для поиска текста в файле существует команда grep. Её можно использовать для поиска файлов и папок с определёнными именем. Вы можете выполнить поиск строки внутри файлов благодаря *. Также вы можете осуществлять поиск файлов с определённым расширением *.php.


# показывает номер строки + саму строку
crontab -l | grep -n "Ivan"

# вы можете прочитать разом все файлы и сделать фильтр grep
cat * | grep 'текст для поиска'

# поиск по файлу с номером строки
grep -n 'if' create_script_comment.sh

# поиск строки
grep text file1.txt

# множественный поиск по всем файлам в папке
grep text *

# рекурсивный поиск по всем папкам внутри родительской папки
grep -R text *

# регистронезависимый и рекурсивный поиск
grep -Ri text *

# поиск слова, а не вхождения строки
grep -wR text *

# показывает количество вхождений
grep -nw text *

# поиск без названия файла. 
# будет выводиться только найденный текст со всех файлов.
grep -h text *

# поиск в списке файлов
ls -i | grep -i text

Для удобства вы можете воспользоваться регулярными выражениями.


# если в строке есть числа 1 или 2 то вернется найденная строка. 
# разделить | из одного условия делает два условия
echo 1111111111112 | grep '[1]|[2]' 

# если в строке есть 3 и 4, то вернётся найденная строка, расположение чисел не важно
echo 11111111111112234 | grep '[34]'

# если строка из 4 символов, то вернётся найденная строка
echo 1111 | grep '[0-9]\{4\}'

# если строка из содержимое файла совпадает с read или reed, 
# то вернётся найденная строка или строки
egrep 're(a|e)d' file.txt

# если в файле есть строка 3 - test или 4 - test, то вернётся найденная строка
egrep '(3|4) - test' f3.txt

# выводит совпадения
egrep "SELECT" *

# выводит номер строки в котором было совпадение
egrep -b  "SELECT" *

# поиск по целому слову
egrep -w  "SELECT" *

# если в файле есть строка с числом, то вернётся найденная строка
grep [[:digit:]] f3

Столкнулся с одной проблемой. Мне нужно было искать сразу несколько элементов. Для этих целей у grep есть разделитель |. Можно создать несколько условий для поиска.


grep "выражение1\|выражение2" file
grep -e "выражение1|выражение2" file
grep -e выражение1 -e выражение2 file
egrep "выражение1|выражение2" file

Столкнулся с определённой проблемой. Был большой файл и редактор notepad++ не позволял его редактировать. Мне нужно было очистить файл от лишних данных. Выбирать данные кусками - это кропотливое занятие. Ключ -v позволяет исключить данные в которых найдена заданная строка. Процесс исключения данных называют инверсией.


# вывести все данные на экран, кроме тех, в которых есть определённая строка
cat file.txt | grep -v search_string

Вы можете вывести содержимое файла без закомментированных строк при помощи выражения ^#. Это удобно! Многие файлы в линукс закомментированы.


# вывести все данные на экран, кроме закомментированных строк
cat ./file.txt | grep -v '^#' 

Можно очистить вывод содержимого файла от пустых строк при помощи выражения ^$. Если вам нужно подсчитать количество строк в файле, то удалите пустые строки.


# вывести все данные на экран, кроме пустых строк
cat ./file.txt | grep -v '^$'

Вы можете разукрасить вывод данных на экране. Ключ --color изменит вывод данных. Например, у меня название файла отображается фиолетовым цветом. Найденная строка подсвечивается красным цветом. Все остальные строки белого цвета. Это очень удобно.


#разукрашивание вывода
grep -v --color search_string

Для поиска помимо команды grep еще существует команда find. Читайте статью Как найти файлы по расширению размеру дате find BASH

Комментарии

реклама