Как найти строку в файлах на линукс (Ubuntu)?

Итак встречайте героев сегодняшнего обзора: locate — предоставляет поиск по имени файла в заранее подготовленной базе данных, find — работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep — утилите для поиска текста в файлах.

Как найти строку в файлах на линукс?

В этом нам поможет утилита командной строки под названием grep. Она ищет строки, которые отвечают регулярному выражению и выводит их на консоль.

Обратите внимание на следующее

  1. Используйте скобки, если строка содержит пробелы «текст команды«.
  2. Помните про пробелы между расширениями {js,java}
  3. Не используйте фигурные скобки для одного расширения {java}  -> java

Ниже представлены наиболее полезные команды, которые я использую в повседневной работе, а также другие работающие команды, найденные на просторах Интернета:

Простой поиск строки в файле

Структура команды: grep строка названиеФайла

Пример использования: grep name

Поиск строки в файле игнорируя чувствительность к регистру

Структура команды: grep строка названиеФайла

Пример использования: grep -i name

Найти строку в текущей директории

Структура команды: grep строка .

Пример использования: grep name .

Найти строку рекурсивно

Структура команды: grep -r строка .

Пример использования: grep -r name .

Найти файлы, которые не содержать определенную строку

Структура команды: grep -L строка *

Пример использования: grep -L «foo» *

Рекурсивно найти строку только в определенных файлах

Структура команды:

Читайте также:  105 команд для работы с сервером Linux по SSH

grep  строка -r . —include=*.расширениеФайла 

grep строка -r . —include=*.{расширениеФайла, расширениеФайла2}

Пример использования: grep «name=Main» -r . —include=*.java

Обратите внимание! Эти команды буду искать только в тех файлах, которые вы определили в секции —include=*.{…}

Рекурсивно найти строку кроме определенных расширений

Структура команды: grep  строка -r . —exclude=*.{расширениеФайла}

Пример использования: grep «Serializable» -r . —exclude=*.{jar,js,index}

Рекурсивно найти строку в определенных расширениях, исключая указанные

Структура команды:

grep  строка -r . —include=*.расширениеФайла  —exclude=*.расширениеФайла2

grep  строка -r . —include=*.{расширениеФайла,расширениеФайла2} —exclude=*.{расширениеФайла3,расширениеФайла2}

Пример использования: grep «name=Main» -r . —include=*.{java,html} —exclude=*.java

Обратите внимание! Команда выше не будет искать в файлах с расширением .java

Ищите другие полезности в специальном разделе.

Больше полезных статей!

  • Читаем XML файл в Java с помощью StAX
  • Как преобразовать изображение в массив байтов на Java?
  • Android Internal Storage: пример работы с внутренней памятью
  • Как изменить XML файл в Java: используем DOM Parser

Вы можете создавать символические ссылки, используя команду mklink в окне командной строки в качестве администратора. Чтобы открыть её, найдите ярлык «Командная строка» в меню «Пуск», щелкните его правой кнопкой мыши и выберите «Запуск от имени администратора».

В Windows Creators Update вы можете использовать обычное окно командной строки, не запуская его как администратор. Однако, чтобы сделать это без окна командной строки администратора, вы должны сначала включить режим разработчика в Параметры → Обновление и безопасность → Разработчики.

Без каких-либо дополнительных опций mklink создает символическую ссылку на файл. Команда ниже создает символическую или «мягкую» ссылку (Link) на объект Target:

mklink Link Target

Используйте /D, если вы хотите создать символическую ссылку, указывающую на каталог:

mklink /D Link Target

Используйте /H, если вы хотите создать жесткую ссылку, указывающую на файл:

mklink /H Link Target

Используйте /J для создания жесткой ссылки, указывающую на каталог:

mklink /J Link Target

Так, например, если вы хотите создать жесткую ссылку в C:\LinkToFolder, которая указывала бы на C:\Users\Name\OriginalFolder, вы должны выполнить следующую команду:

mklink /J C:\LinkToFolder C:\Users\Name\OriginalFolder

Вам нужно будет помещать в кавычки пути с пробелами. Например, если папка называется C:\Link To Folder и C:\Users\Name\Original Folder, вы должны использовать следующую команду:

Читайте также:  Терминал или командная строка для пользователей Linux

mklink /J «C:\Link To Folder» «C:\Users\Name\Original Folder»

Если вы увидите сообщение «У вас недостаточно прав для выполнения этой операции», Вам следует запустить Командную строку как Администратор.

Примеры использования grep

# вывести все данные на экран, кроме закомментированных строк cat ./ | grep -v ‘^#’ # вывести все данные на экран, кроме пустых строк cat ./ | grep -v ‘^$’ # вы можете прочитать разом все файлы и сделать фильтр grep cat * | grep ‘текст для поиска’ # поиск по целому слову egrep -w «SELECT» * поиск в списке файлов ls -i | grep -i text # рекурсивный поиск по всем папкам внутри родительской папки grep -R text *

Сегодня мы с вами рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках.

Если есть вопросы, то пишем в комментариях.

Также можете помочь проекту, заранее всем СПАСИБО!!!

Пожертвовать

Поиск папки

На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка — это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните

# find / -type d -name «*mysql*»

Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:

  • b — блочное устройство
  • c — символьное устройство
  • d — папка (дирректория)
  • p — именнованный канал
  • f — обычный файл
  • l — символическая ссылка
  • s — сокет
  • D — дверь (только для Solaris)

Подробнее о различных параметрах поиска find вы можете почитать, введя команду

$ man find

Поиск текста в Linux при помощи утилиты grep

Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text — чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php…) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.

Читайте также:  23 скрытые функции iOS 14, на которые стоит обратить внимание

Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести

# grep -lri root /etc/*

Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root», но и «ROOT», и «rOOt»… Вы поняли

Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите

# grep -lri ^root /etc/*

Крышка в начале слова «root» обязывает grep выводит только те файлы, где слово «root» стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии

Управление файлами в Linux

Создание пустого файла

touch file_

Просмотр содержимого файла:

cat file_

Редактирование файла:

nano /etc/

где /etc/ — путь к файлу.

Для редактирования файлов должен быть установлен редактор nano.

Копирование файла:

cp otkuda/ kuda/

^ Находиться надо в родительской категории, где есть папки otkuda и kuda.

Копирование папки:

cp -r /откуда_копируем/копируемая_папка /куда_копируем/копируемая_папка

Копировании папки в текущей директории:

cp -r www www-old

Назначаем права доступа:

chmod 755