Поиск по сайту:

12 полезных команд для фильтрации текста для эффективных операций с файлами в Linux


В этой статье мы рассмотрим ряд инструментов командной строки, которые действуют как фильтры в Linux. Фильтр — это программа, которая считывает стандартный ввод, выполняет над ним операцию и записывает результаты в стандартный вывод.

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

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

1. Команда AWK

Awk — замечательный язык сканирования и обработки шаблонов. Его можно использовать для создания полезных фильтров в Linux. Вы можете начать использовать его, прочитав нашу серию статей об Awk, части 1–13.

Кроме того, прочитайте справочную страницу awk для получения дополнительной информации и вариантов использования:

man awk

2. Команда СЭД

sed — мощный потоковый редактор для фильтрации и преобразования текста. Мы уже написали две полезные статьи о sed, с которыми вы можете ознакомиться здесь:

  1. Как использовать команду GNU «sed» для создания, редактирования и управления файлами в Linux
  2. 15 полезных советов и рекомендаций по команде «sed» для ежедневных задач системного администрирования Linux

На странице руководства sed добавлены параметры управления и инструкции:

man sed

3. Команды Grep, Egrep, Fgrep, Rgrep

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

Примечание. Основная программа — grep, ее варианты аналогичны использованию определенных параметров grep, как показано ниже (и они все еще используются для обратной совместимости):

egrep = grep -E
fgrep = grep -F
rgrep = grep -r  

Ниже приведены некоторые основные команды grep:

tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:

Вы можете узнать больше о том, в чем разница между Grep, Egrep и Fgrep в Linux?

4. руководитель команды

head используется для отображения первых частей файла. По умолчанию он выводит первые 10 строк. Вы можете использовать флаг -n num, чтобы указать количество отображаемых строк:

tecmint@TecMint ~ $ head /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
Jan  2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)

tecmint@TecMint ~ $ head  -n 5 /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root

Узнайте, как использовать команду head с командами Tail и Cat для эффективного использования в Linux.

5. Команда хвоста

tail выводит последние части (по умолчанию 10 строк) файла. Используйте цифровой переключатель -n, чтобы указать количество отображаемых строк.

Команда ниже выведет последние 5 строк указанного файла:

tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Кроме того, tail имеет специальную опцию -f для просмотра изменений в файле в режиме реального времени (особенно в файлах журналов).

Следующая команда позволит вам отслеживать изменения в указанном файле:

tecmint@TecMint ~ $ tail -f /var/log/auth.log
Jan  6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Прочтите справочную страницу tail для получения полного списка опций использования и инструкций:

man tail

6. Команда сортировки

sort используется для сортировки строк текстового файла или стандартного ввода.

Ниже приведено содержимое файла с именем domains.list:

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com

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

tecmint@TecMint ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.linux-console.net
news.linux-console.net
linux-console.net
linux-console.net
windowsmint.com
windowsmint.com

Вы можете использовать команду sort разными способами. Ознакомьтесь с некоторыми полезными статьями о команде сортировки следующим образом:

  1. 14 полезных примеров команды sort в Linux – часть 1
  2. 7 интересных примеров команды sort в Linux – часть 2
  3. Как найти и отсортировать файлы по дате и времени изменения
  4. Как отсортировать вывод команды «ls» по дате и времени последнего изменения

7. uniq команда

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

После запуска sort во входном потоке вы можете удалить повторяющиеся строки с помощью uniq, как показано в примере ниже.

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

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com

tecmint@TecMint ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com 

Прочтите справочную страницу uniq для получения дополнительной информации об использовании и флагов:

man uniq

8. Команда fmt

fmt простой оптимальный форматировщик текста, который переформатирует абзацы в указанном файле и выводит результаты на стандартный вывод.

Ниже приводится содержимое, извлеченное из файла domain-list.txt:

1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

Чтобы переформатировать приведенное выше содержимое в стандартный список, выполните следующую команду с переключателем -w, который используется для определения максимальной ширины строки:

tecmint@TecMint ~ $ cat domain-list.txt 
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
1.linux-console.net 
2.news.linux-console.net 
3.linuxsay.com 
4.windowsmint.com

9. Команда PR

Команда pr преобразует текстовые файлы или стандартный ввод для печати. Например, в системах Debian вы можете перечислить все установленные пакеты следующим образом:

dpkg -l

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

tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20  

2017-01-06 13:19                                                  Page 1


Desired=Unknown/Install ii  adduser		ii  apg
| Status=Not/Inst/Conf- ii  adwaita-icon-theme	ii  app-install-data
|/ Err?=(none)/Reinst-r ii  adwaita-icon-theme- ii  apparmor
||/ Name		ii  alsa-base		ii  apt
+++-=================== ii  alsa-utils		ii  apt-clone
ii  accountsservice	ii  anacron		ii  apt-transport-https
ii  acl			ii  apache2		ii  apt-utils
ii  acpi-support	ii  apache2-bin		ii  apt-xapian-index
ii  acpid		ii  apache2-data	ii  aptdaemon
ii  add-apt-key		ii  apache2-utils	ii  aptdaemon-data


2017-01-06 13:19                                                  Page 2


ii  aptitude		ii  avahi-daemon	ii  bind9-host
ii  aptitude-common	ii  avahi-utils		ii  binfmt-support
ii  apturl		ii  aview		ii  binutils
ii  apturl-common	ii  banshee		ii  bison
ii  archdetect-deb	ii  baobab		ii  blt
ii  aspell		ii  base-files		ii  blueberry
ii  aspell-en		ii  base-passwd		ii  bluetooth
ii  at-spi2-core	ii  bash		ii  bluez
ii  attr		ii  bash-completion	ii  bluez-cups
ii  avahi-autoipd	ii  bc			ii  bluez-obexd

.....

Здесь используются следующие флаги:

  1. --column определяет количество столбцов, созданных в выходных данных.
  2. -l указывает длину страницы (по умолчанию — 66 строк).

10. Команда tr

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

Синтаксис использования tr следующий:

tr options set1 set2

Взгляните на примеры ниже: в первой команде set1( [:upper:] ) представляет регистр входных символов (все прописные буквы).

Тогда set2([:lower:]) представляет случай, в котором будут получены результирующие символы. То же самое и во втором примере, и escape-последовательность \n означает вывод на новую строку:

tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
linux-console.net

tecmint@TecMint ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM

11. больше команд

Команда more — это полезный фильтр просмотра файлов, созданный в основном для просмотра сертификатов. Содержимое файла отображается в формате страницы, где пользователи могут нажать [Enter], чтобы просмотреть дополнительную информацию.

Вы можете использовать его для просмотра больших файлов следующим образом:

tecmint@TecMint ~ $ dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--

12. Меньше команды

less является противоположностью команды more, описанной выше, но предлагает дополнительные функции и работает немного быстрее с большими файлами.

Используйте его так же, как и многое другое:

tecmint@TecMint ~ $ dmesg | less
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:

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

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