Wyszukiwanie w witrynie

12 przydatnych poleceń do filtrowania tekstu w celu efektywnego wykonywania operacji na plikach w systemie Linux


W tym artykule dokonamy przeglądu szeregu narzędzi wiersza poleceń, które działają jak filtry w systemie Linux. Filtr to program, który odczytuje standardowe wejście, wykonuje na nim operację i zapisuje wyniki na standardowym wyjściu.

Z tego powodu można go używać do wydajnego przetwarzania informacji, na przykład do restrukturyzacji wyników w celu generowania przydatnych raportów, modyfikowania tekstu w plikach i wielu innych zadań administracyjnych systemu.

Mając to na uwadze, poniżej znajdują się niektóre przydatne filtry plików lub tekstu w systemie Linux.

1. Polecenie Awk

Awk to niezwykły język skanowania i przetwarzania wzorców, którego można używać do tworzenia przydatnych filtrów w systemie Linux. Możesz zacząć z niego korzystać, czytając naszą serię Awk od części 1 do części 13.

Dodatkowo przeczytaj także stronę podręcznika awk, aby uzyskać więcej informacji i opcji użycia:

man awk

2. Dowództwo Sed

sed to potężny edytor strumieniowy do filtrowania i przekształcania tekstu. Napisaliśmy już dwa przydatne artykuły na temat sed, które możesz przejrzeć tutaj:

  1. Jak używać polecenia GNU „sed” do tworzenia, edytowania i manipulowania plikami w systemie Linux
  2. 15 przydatnych wskazówek i wskazówek dotyczących poleceń „sed” do codziennych zadań administracyjnych systemu Linux

Strona podręcznika sed dodała opcje sterowania i instrukcje:

man sed

3. Polecenia Grep, Egrep, Fgrep, Rgrep

Filtry te wyświetlają linie pasujące do danego wzorca. Odczytują linie z pliku lub standardowego wejścia i domyślnie wypisują wszystkie pasujące linie na standardowe wyjście.

Uwaga: głównym programem jest grep, odmiany są po prostu takie same, jak przy użyciu określonych opcji grep opisanych poniżej (i nadal są używane w celu zapewnienia kompatybilności wstecznej):

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

Poniżej znajduje się kilka podstawowych poleceń 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:

Możesz przeczytać więcej na temat różnicy między Grepem, Egrepem i Fgrepem w systemie Linux?.

4. szef Dowództwa

head służy do wyświetlania pierwszych części pliku, domyślnie wyświetla pierwsze 10 linii. Możesz użyć flagi num -n, aby określić liczbę wyświetlanych linii:

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

Dowiedz się, jak używać poleceń head z poleceniami tail i cat w celu efektywnego wykorzystania w systemie Linux.

5. Komenda ogona

tail wyświetla ostatnie części (domyślnie 10 linii) pliku. Użyj przełącznika numerycznego -n, aby określić liczbę wyświetlanych linii.

Poniższe polecenie wyświetli ostatnie 5 wierszy określonego pliku:

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.

Dodatkowo tail posiada specjalną opcję -f umożliwiającą podgląd zmian w pliku w czasie rzeczywistym (szczególnie w plikach dziennika).

Poniższe polecenie umożliwi monitorowanie zmian w określonym pliku:

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.

Przeczytaj stronę podręcznika tail, aby uzyskać pełną listę opcji użytkowania i instrukcje:

man tail

6. sortuj polecenie

sortowanie służy do sortowania linii pliku tekstowego lub ze standardowego wejścia.

Poniżej znajduje się zawartość pliku o nazwie 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

Możesz uruchomić proste polecenie sortowania, aby posortować zawartość pliku w następujący sposób:

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

Polecenie sort można używać na wiele sposobów. Przejrzyj kilka przydatnych artykułów na temat polecenia sortowania w następujący sposób:

  1. 14 Przydatne przykłady polecenia „sort” w systemie Linux – część 1
  2. 7 interesujących przykładów poleceń „sort” w systemie Linux – część 2
  3. Jak znajdować i sortować pliki na podstawie daty i godziny modyfikacji
  4. Jak posortować dane wyjściowe polecenia „ls” według daty i godziny ostatniej modyfikacji

7. polecenie unikalne

Komenda uniq służy do zgłaszania lub pomijania powtarzających się linii, filtruje linie ze standardowego wejścia i wypisuje wynik na standardowe wyjście.

Po uruchomieniu sort w strumieniu wejściowym możesz usunąć powtarzające się linie za pomocą uniq, jak w przykładzie poniżej.

Aby wskazać liczbę wystąpień linii, użyj opcji -c i zignoruj różnice w wielkości liter podczas porównywania, włączając opcję -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 

Przeczytaj stronę podręcznika uniq, aby uzyskać dalsze informacje o użytkowaniu i flagach:

man uniq

8. fm Polecenie

fmt prosty, optymalny formater tekstu, ponownie formatuje akapity w określonym pliku i drukuje wyniki na standardowym wyjściu.

Poniżej znajduje się treść wyodrębniona z pliku domain-list.txt:

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

Aby sformatować powyższą treść do standardowej listy, uruchom następującą komendę z przełącznikiem -w, który służy do zdefiniowania maksymalnej szerokości linii:

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 Dowództwo

Polecenie pr konwertuje pliki tekstowe lub standardowe dane wejściowe do wydruku. Na przykład w systemach Debian możesz wyświetlić listę wszystkich zainstalowanych pakietów w następujący sposób:

dpkg -l

Aby uporządkować listę w strony i kolumny gotowe do druku, wydaj następujące polecenie.

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

.....

Stosowane tutaj flagi to:

  1. --column określa liczbę kolumn tworzonych w wyniku.
  2. -l określa długość strony (domyślnie jest to 66 linii).

10. tr Polecenie

To narzędzie tłumaczy lub usuwa znaki ze standardowego wejścia i zapisuje wyniki na standardowe wyjście.

Składnia użycia tr jest następująca:

tr options set1 set2

Spójrz na poniższe przykłady, w pierwszym poleceniu set1( [:upper:] ) reprezentuje wielkość liter wejściowych (wszystkie wielkie litery).

Następnie set2([:lower:]) reprezentuje przypadek, w którym będą wynikowe znaki. To samo w drugim przykładzie, a sekwencja ucieczki \n oznacza wydruk w nowej linii:

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. więcej Polecenie

Polecenie więcej to przydatny filtr przeglądania plików, stworzony głównie do przeglądania certyfikatów. Pokazuje zawartość pliku w formacie przypominającym stronę, na której użytkownicy mogą nacisnąć [Enter], aby wyświetlić więcej informacji.

Możesz go użyć do przeglądania dużych plików, takich jak:

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. mniej Polecenie

mniej jest przeciwieństwem powyższego polecenia więcej, ale oferuje dodatkowe funkcje i jest nieco szybszy w przypadku dużych plików.

Użyj go w taki sam sposób, jak więcej:

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
:

Dowiedz się, dlaczego „mniej” znaczy szybciej niż „więcej” Polecenie umożliwiające efektywną nawigację po plikach w systemie Linux.

To wszystko na razie. Daj nam znać o wszelkich przydatnych narzędziach wiersza poleceń, które nie zostały tutaj wymienione, a które działają jako filtry tekstu w systemie Linux, korzystając z sekcji komentarzy poniżej.