How to find text in files in linux

Рекурсивный поиск

Для рекурсивного поиска шаблона,  используйте  опцию (или  ). Когда эта опция используется,  будет выполняться поиск по всем файлам в указанном каталоге, пропуская символические ссылки, которые встречаются рекурсивно.

Чтобы перейти по всем символическим ссылкам , вместо этого  используйте  опцию (или  ).

Вот пример, показывающий, как искать строку  во всех файлах в  каталоге:

Вывод будет включать совпадающие строки с префиксом полного пути к файлу:

Если вы используете  опцию,  перейдите по всем символическим ссылкам:

Обратите внимание на последнюю строку вывода ниже. Эта строка не печатается, когда  вызывается  из-за того, что файлы в  каталоге Nginx являются символическими ссылками на файлы конфигурации внутри  каталога.

Поиск полных слов

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

Например, если вы ищете «gnu», все строки, где «gnu» встроен в более крупные слова, такие как «cygnus» или «magnum», будут совпадать:

Чтобы вернуть только те строки, в которых указанная строка представляет собой целое слово (заключенное не в словах), используйте параметр  (или  ).

Символов слова включают в себя буквенно — цифровые символы (  ,  и  ) и подчеркивание (  ). Все остальные символы рассматриваются как несловесные символы.

Если вы выполните ту же команду, что и выше, включая  опцию,  команда вернет только те строки, которые  включены в качестве отдельного слова.

Поиск без учета регистра

По умолчанию чувствителен к регистру. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные.

Чтобы игнорировать регистр при поиске, вызовите с параметром (или ).

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

Но если вы выполните поиск без учета регистра с использованием параметра , он будет соответствовать как заглавным, так и строчным буквам:

Указание «Зебра» будет соответствовать «зебре», «ZEbrA» или любой другой комбинации букв верхнего и нижнего регистра для этой строки.

Просмотр текстового файла в Linux полностью

Чтобы вывести содержимое всего текстового файла, в Linux используют команду cat. Она отлично походит для вывода небольших текстовых файлов, к примеру, конфигурационных файлов. Синтаксис прост:

cat  <путь_к_файлу/имя_файла>

Представьте, что надо посмотреть содержимое файла с названием myfile.txt:

cat myfile.txt

Также можно вместо имени прописать адрес (путь) к файлу:

cat /etc/passwd

Если нужно посмотреть несколько файлов сразу, это тоже не вызовет проблем:

Кроме того, при просмотре текстового файла в Linux мы можем отобразить номера строк. Для этого потребуется всего лишь использовать опцию -n:

cat -n file.txt

Команда nl функционирует аналогично команде cat с опцией -n, выводя номера строк в столбце слева.

nl file.txt

При необходимости вы можете сделать так, чтобы при выводе текстового файла в конце каждой строки отображался символ $:

 cat -e test

Вывод будет следующим:

hello everyone, how do you do?$
$
Hey, am fine.$

Кроме cat, для вывода содержимого текстового файла в Linux используется команда tac. Её разница заключается в том, что она выводит содержимое файла в обратном порядке.

Листинг в длинном формате

Параметр -l (длинный список) заставляет ls предоставлять подробную информацию о каждом файле.

ls -l

Здесь много информации, так что давайте рассмотрим ее подробнее.

Первое, что отображает ls, — это общий размер всех файлов в списке. Затем каждый файл или каталог отображается в отдельной строке.

Первый набор из десяти букв и тире — это тип файла, а также владелец, группа и другие права доступа к файлу.

Самый первый символ представляет тип файла. Это будет один из:

-: обычный файл.b: специальный файл блока.c: специальный символьный файл.d: Каталог.l: символическая ссылка.n: сетевой файл.p: именованный канал.s: розетка.

Следующие девять символов представляют собой три группы по три символа, отображаемых подряд. Каждая группа из трех представляет разрешения на чтение, запись и выполнение в указанном порядке. Если разрешение предоставлено, будет присутствовать r, w или x. Если разрешение не предоставлено, отображается дефис -.

Первый набор из трех символов — это разрешения для владельца файла. Второй набор из трех разрешений предназначен для членов группы, а последний набор из трех разрешений — для других.

Иногда разрешение на выполнение для владельца представлено буквой s. Это Setuid немного. Если он присутствует, это означает, что файл выполняется с привилегиями владельца файла, а не пользователя, выполняющего файл.

Разрешение на выполнение для группы также может быть s. Это Setgid немного. Когда это применяется к файлу, это означает, что файл будет выполнен с привилегиями группы владельца. При использовании с каталогом любые файлы, созданные внутри него, будут получать свои групповые разрешения из каталога, в котором они создаются, а не от пользователя, который создает файл.

Разрешение на выполнение для остальных иногда может быть представлено буквой t. Это липкий кусочек. Обычно применяется к каталогам. Если он установлен, независимо от прав записи и выполнения, установленных для файлов в каталоге, только владелец файла, владелец каталога или пользователь root могут переименовывать или удалять файлы в каталоге.

Обычно липкий бит используется в таких папках, как «/ tmp». Это доступно для записи всем пользователям компьютера. Бит залипания в каталоге гарантирует, что пользователи и процессы, запущенные пользователями, могут переименовывать или удалять только свои временные файлы.

Мы видим липкий бит в каталоге «/ tmp»

Обратите внимание на использование параметра -d (каталог). Это заставляет ls сообщать подробную информацию о каталоге

Без этой опции ls будет сообщать о файлах внутри каталога.

ls -l -d /tmp

Число после разрешений — это количество жестких ссылок на файл или каталог. Для файла это обычно один, но если создаются другие жесткие ссылки, это число будет увеличиваться. В каталоге обычно есть как минимум две жесткие ссылки. Один является ссылкой на себя, а другой — его записью в родительском каталоге.

Далее отображаются имя владельца и группа. За ними следует размер файла и дата последнего изменения файла. Наконец, дается имя файла.

Просматриваем начало или конец файла в Linux

Порой, нам не нужно выводить содержимое всего файла и мы хотим, к примеру, посмотреть лишь несколько строчек лога. Такое часто бывает, если мы подозреваем, что в начале или в конце конфигурационного файла есть ошибки. Для решения данного вопроса у нас существуют команды head и tail (как вы уже догадались, это голова и хвост).

Команда head по умолчанию показывает лишь 10 первых строчек в текстовом файле в Linux:

head /etc/passwd

Вот, что мы увидим:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
adm:x:3:4:adm:/var/adm:/bin/false
lp:x:4:7:lp:/var/spool/lpd:/bin/false
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
news:x:9:13:news:/var/spool/news:/bin/false
uucp:x:10:14:uucp:/var/spool/uucp:/bin/false

Кстати, тут мы тоже можем открыть сразу несколько текстовых файлов в Linux одновременно. Вот просмотр сразу двух файлов:

 head /etc/passwd /etc/shadow

Если же вас не интересуют все 10 строчек, то, как и в случае с cat, можно использовать опцию –n, цифрой указывая число строк к выводу:

 head -n5 /var/log/emerge.log

В итоге мы вывели только пять строк:

1394924012: Started emerge on: Mar 15, 2014 22:53:31
1394924012: *** emerge --sync
1394924012: === sync
1394924012: >>> Synchronization of repository 'gentoo' located in '/usr/portage'...
1394924027: >>> Starting rsync with rsync://212.113.35.39/gentoo-portage

По правде говоря, букву n можно и не использовать, достаточно просто передать цифру:

 head -5 /var/log/emerge.log

Кстати, выводить содержимое текстового файла в Linux можно не построчно, а посимвольно. Давайте зададим число символов, которое нужно вывести (используем опцию -с):

 head -c45 /var/log/emerge.log

Итак, выводим 45 символов:

1394924012: Started emerge on: Mar 15, 2014 2

Не верите, что их действительно 45? Проверить можно командой wc:

 head -c45 /var/log/emerge.log | wc -c
45

С «головой» разобрались, давайте поговорим про «хвост». Очевидно, что команда tail работает наоборот, выводя десять последних строк текстового Linux-файла:

 tail /var/log/emerge.log

Количество строк при выводе тоже можно менять. Однако в tail есть такая полезная опция, как -f. С её помощью содержимое текстового файла будет постоянно обновляться, в результате чего вы станете видеть изменения сразу (постоянно открывать и закрывать файл не придётся). Это весьма удобно, если вы хотите просматривать логи Linux в реальном времени:

 tail -f /var/log/emerge.log

Как использовать команду uniq

Существуют различные параметры и флаги, которые вы можете использовать с uniq. Некоторые из них являются базовыми и выполняют простые операции, такие как печать повторяющихся строк, в то время как другие предназначены для опытных пользователей, которые часто работают с текстовыми файлами в Linux.

Базовый синтаксис

Базовый синтаксис команды uniq:

… где option – это флаг, используемый для вызова определенных методов команды, input – это текстовый файл для обработки, а output – это путь к файлу, в котором будет храниться вывод.

Выходной аргумент является необязательным и может быть пропущен. Если пользователь не указывает входной файл, uniq берет данные из стандартного вывода в качестве входных. Это позволяет пользователю передавать uniq по конвейеру с другими командами Linux .

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

Мы будем использовать текстовый файл duplicate.txt в качестве входных данных для команды.

Обратите внимание, что мы уже отсортировали этот текстовый файл с помощью команды sort. Если вы работаете с другим текстовым файлом, вы можете отсортировать его с помощью следующей команды:

Удалить повторяющиеся линии

Основное использование uniq – удаление повторяющихся строк из ввода и печать уникального вывода.

Выход:

Обратите внимание, что система не отображает второе вхождение строки. Это текстовый файл

Кроме того, вышеупомянутая команда печатает только уникальные строки в файле и не влияет на содержимое исходного текстового файла.

Подсчет повторяющихся строк

Чтобы вывести количество повторяющихся строк в текстовом файле, используйте флаг -c с командой по умолчанию.

Выход:

Система отображает количество строк в текстовом файле. Вы можете видеть, что строка This is a text file встречается в файле два раза. По умолчанию команда uniq чувствительна к регистру.

Печатать только повторяющиеся строки

Чтобы печатать только повторяющиеся строки из текстового файла, используйте флаг -D . -D означает Дубликат .

Система отобразит вывод следующим образом.

Пропуск полей при проверке дубликатов

Если вы хотите пропустить определенное количество полей при сопоставлении строк, вы можете использовать флаг -f с командой. -F означает поле .

Рассмотрим следующий текстовый файл fields.txt .

Чтобы пропустить первое поле:

Выход:

Вышеупомянутая команда пропустила первое поле (IP-адреса и имена ОС) и сопоставила второе слово (TCP и FS). Затем он отображал первое вхождение каждого совпадения в качестве вывода.

Игнорировать символы при сравнении

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

Чтобы игнорировать первые два символа (нумерацию списков) в файле list.txt :

Выход:

В выводе выше первые два символа были проигнорированы, а остальные были сопоставлены с уникальными строками.

Проверьте количество первых N символов на наличие дубликатов

Флаг -w позволяет проверять на наличие дубликатов только фиксированное количество символов. Например:

Вышеупомянутая команда будет соответствовать только первым двум символам и будет печатать уникальные строки, если таковые имеются.

Выход:

Удалить чувствительность к регистру

Как упоминалось выше, uniq чувствителен к регистру при сопоставлении строк в файле. Чтобы игнорировать регистр символов, используйте параметр -i с командой.

Вы увидите следующий результат.

Обратите внимание, что в выводе выше uniq не отображал строки DO CATCH THIS и THIS IS A TEXT FILE

Отправить вывод в файл

Чтобы отправить вывод команды uniq в файл, вы можете использовать символ перенаправления вывода ( > ) следующим образом:

При отправке вывода в текстовый файл система не отображает вывод команды. Вы можете проверить содержимое нового файла с помощью команды cat .

Вы также можете использовать другие способы отправки вывода командной строки в файл в Linux .

Linux урок 7. Команды Man, info, ключ —help. Справочная документация команд в Linux.

844

17

2

00:09:00

10.09.2020

Команды Man, info, ключ help.
Справочная документация команд в Linux.

=

Команда man (manual — руководство)
Выводит страницу документации запрашиваемой команды.
В качестве аргумента передается имя_команды.
Ман-страницы, или просто маны — это классическая
форма справочной документации UNIX и Linux.

На практике некоторые страницы руководств
не были написаны или устарели.
Тем не менее, маны остаются первым местом,
куда следует обращаться за помощью.

Синтаксис:
man имя_команды

Пример:
man cat

Построчное пролистывание:
-стрелочки вверх/вниз
-вверх, клавиша: y
-вниз, клавиша: e или ENTER

Постраничное пролистывание:
w — вверх к началу документа
z или ПРОБЕЛ — вниз к концу страницы

Справка по навигации, клавиша: h,
Вернуться в документацию, клавиша: q

Выход из ман-страницы, клавиша: q

Заголовки man странице:

NAME — имя команды, функция которую она
показывает(Например: поиск файлов)

SYNOPSYS — Синтаксис команды.
-Параметры без скобок являются ОБЯЗАТЕЛЬНЫМИ
-Параметры в квадратных скобках []
являются НЕ ОБЯЗАТЕЛЬНЫМИ(опциональные расширения
или просто опции)

DISCRIPTION — Описание программы и ее ключей.

EXAMPLES — Пример использования команды

AUTHOR — Разработчик программы

REPORTING BUGS — Сообщать об ошибках в программе.

COPYRIGHT — Авторские права на программу,
лицензии под которой она распространяется.

SEE ALSO — Дополнительная информация.

Обратить внимание на cat
CAT(1) — число 1 указывает на раздел
к которому относится данная страница. Самый последний мануал
🤍

Самый последний мануал
🤍

=

Команда info

Гипертекстовый сборник (в тексте есть ссылки по
которым можно перемещаться)

Синтаксис
info имя_команды

Пример:
info cat

Построчное пролистывание:
-стрелочки вверх/вниз

Перемещение по ссылкам:
-переместить курсор в подчеркнутый текст
начинающийся с *, нажать ENTER

Перемещение по статьям:
p -вверх к началу документа
n -вниз к концу документа

Выход из документации:
q
=

Команда help, но лучше использовать ее как ключ
help -данный ключ, позволяет получать краткую
справку по команде. Информация видна, во время
написания следующей команды.

Пример:
cat help
cat help|less

Примеры команды grep в Linux и Unix

Ниже приведены некоторые стандартные команды grep, объясненные с примерами, которые помогут вам начать работу с grep в Linux, macOS и Unix:

  1. Найдите любую строку, которая содержит слово в имени файла в Linux: grep 'word' filename
  2. Выполните поиск слова ‘bar’ без учета регистра в Linux и Unix: grep -i 'bar' file1
  3. Найдите все файлы в текущем каталоге и во всех его подкаталогах в Linux по слову httpd: grep -R 'httpd' .
  4. Найдите и отобразите общее количество раз, когда строка ‘nixcraft’ появляется в файле с именем frontpage.md:: grep -c 'nixcraft' frontpage.md

Давайте подробно рассмотрим все команды и параметры.

Синтаксис

Синтаксис  grep следующий:

grep 'word' filename
fgrep 'word-to-search' file.txt
grep 'word' file1 file2 file3
grep 'string1 string2'  filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' fileName
grep -options pattern filename
fgrep -options words file

grep ‘word’ filename
fgrep ‘word-to-search’ file.txt
grep ‘word’ file1 file2 file3
grep ‘string1 string2’ filename
cat otherfile | grep ‘something’
command | grep ‘something’
command option1 | grep ‘data’
grep —color ‘data’ fileName
grep pattern filename
fgrep words file

Рекурсивный поиск

Для рекурсивного поиска шаблона вызовите с параметром (или ). Когда используется этот параметр, будет искать все файлы в указанном каталоге, пропуская символические ссылки, которые встречаются рекурсивно.

Чтобы следовать по всем символическим ссылкам , вместо используйте параметр (или ).

Вот пример, показывающий, как искать строку во всех файлах внутри каталога :

Вывод будет включать совпадающие строки с префиксом полного пути к файлу:

Если вы используете опцию , будет следовать по всем символическим ссылкам:

Обратите внимание на последнюю строку вывода ниже. Эта строка не печатается, когда вызывается с потому что файлы внутри каталога с Nginx являются символическими ссылками на файлы конфигурации внутри каталога с

Способ 8. Сравнение двух текстовых файлов утилитой comm в Unix

Unix утилита comm входит в стандартную поставку всех Unix- дистрибутивов, таких как FreeBSD, GNU/Linux (пакет GNU Coreutils) и другие.

Программа comm используется для построчного сравнения двух текстовых файлов с отсортированными по алфавиту строками, в соответствии с используемой локалью. Для сортировки можно использовать утилиту sort.

При вызове без параметров рассматриваемая утилита будет выводить строки в трех столбцах: первый столбец будет содержать строки, присутствующие лишь в файле 1, второй столбец — строки, присутствующие лишь в файле 2, а третий столбец — строки, присутствующие в обоих файлах. Утилита поддерживает параметры -1, -2 и -3, позволяющие не выводить столбцы под соответствующими номерами. Статус завершения работы утилиты не зависит от результата распределения строк по столбцам; в случае успешного распределения строк утилита завершает работу с нулевым статусом, в случае возникновения любой ошибки — с ненулевым.

Базовый синтаксис команды выглядит следующим образом:

$ comm параметры <файл 1> <файл 2>

Параметры запуска: -1 Подавить вывод первой колонки; -2 Подавить вывод второй колонки; -3 Подавить вывод третьей; -i Нечувствительное к регистру сравнение строк.

Примеры запуска утилиты comm для сравнения двух файлов по содержимому:

  1. comm -1 file1 file2 сравнить содержимое двух файлов, не отображая строки принадлежащие файлу ‘file1’
  2. comm -2 file1 file2 сравнить содержимое двух файлов, не отображая строки принадлежащие файлу ‘file2’
  3. comm -3 file1 file2 сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах
  4. запуск comm с предварительной сортировкой
    comm <(sort file1.txt) <(sort file2.txt)
  5. В текстовых файлах часто встречаются нежелательные символы, такие как символ возврата каретки, символ конца строки в стиле Windows, символов пробела или табуляции. Самым надежным вариантом было бы отфильтровать все такие нежелательные символы, а поскольку данные являются строго числовыми, это довольно легко сделать, например, с помощью sed (пример вырезания нежелательных символов
    sed 's///g' < input > output

    . В итоге получаем такую команду:

    comm <(sed 's///g' file1.txt | sort) <(sed 's///g' file2.txt | sort)
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
IP-файл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: