Website-Suche

12 nützliche Befehle zum Filtern von Text für effektive Dateioperationen unter Linux


In diesem Artikel werden wir eine Reihe von Befehlszeilentools untersuchen, die unter Linux als Filter fungieren. Ein Filter ist ein Programm, das die Standardeingabe liest, eine Operation darauf durchführt und die Ergebnisse in die Standardausgabe schreibt.

Aus diesem Grund kann es verwendet werden, um Informationen auf leistungsstarke Weise zu verarbeiten, z. B. um die Ausgabe umzustrukturieren, um nützliche Berichte zu erstellen, Text in Dateien zu ändern und viele andere Systemverwaltungsaufgaben durchzuführen.

Vor diesem Hintergrund finden Sie im Folgenden einige der nützlichen Datei- oder Textfilter unter Linux.

1. Awk-Befehl

Awk ist eine bemerkenswerte Musterscan- und -verarbeitungssprache, mit der sich nützliche Filter unter Linux erstellen lassen. Sie können damit beginnen, indem Sie unsere Awk-Serie Teil 1 bis Teil 13 durchlesen.

Lesen Sie außerdem auch die awk-Manpage für weitere Informationen und Verwendungsoptionen:

man awk

2. Sed-Befehl

sed ist ein leistungsstarker Stream-Editor zum Filtern und Transformieren von Text. Wir haben bereits zwei nützliche Artikel über sed geschrieben, die Sie hier lesen können:

  1. So verwenden Sie den GNU-Befehl „sed“ zum Erstellen, Bearbeiten und Bearbeiten von Dateien unter Linux
  2. 15 nützliche Tipps und Tricks zum Befehl „sed“ für tägliche Linux-Systemverwaltungsaufgaben

Die sed-Manpage enthält Steueroptionen und Anweisungen:

man sed

3. Grep-, Egrep-, Fgrep-, Rgrep-Befehle

Diese filtern Ausgabezeilen, die einem bestimmten Muster entsprechen. Sie lesen Zeilen aus einer Datei oder einer Standardeingabe und geben alle übereinstimmenden Zeilen standardmäßig auf der Standardausgabe aus.

Hinweis: Das Hauptprogramm ist grep, die Variationen sind einfach die gleichen wie bei der Verwendung spezifischer grep-Optionen wie unten (und sie werden weiterhin aus Gründen der Abwärtskompatibilität verwendet):

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

Nachfolgend finden Sie einige grundlegende grep-Befehle:

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:

Sie können mehr über den Unterschied zwischen Grep, Egrep und Fgrep unter Linux lesen.

4. Hauptkommando

head wird verwendet, um die ersten Teile einer Datei anzuzeigen, standardmäßig werden die ersten 10 Zeilen ausgegeben. Mit dem Num-Flag -n können Sie die Anzahl der anzuzeigenden Zeilen angeben:

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

Erfahren Sie, wie Sie den Head-Befehl mit den Tail- und Cat-Befehlen für eine effektive Nutzung unter Linux verwenden.

5. Schwanzbefehl

tail gibt die letzten Teile (standardmäßig 10 Zeilen) einer Datei aus. Verwenden Sie den Num-Schalter -n, um die Anzahl der anzuzeigenden Zeilen anzugeben.

Der folgende Befehl gibt die letzten 5 Zeilen der angegebenen Datei aus:

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.

Darüber hinaus verfügt tail über eine spezielle Option -f zum Beobachten von Änderungen in einer Datei (insbesondere Protokolldateien) in Echtzeit.

Mit dem folgenden Befehl können Sie Änderungen in der angegebenen Datei überwachen:

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.

Lesen Sie die tail-Manpage durch, um eine vollständige Liste der Verwendungsoptionen und Anweisungen zu erhalten:

man tail

6. Befehl sortieren

sort wird verwendet, um Zeilen einer Textdatei oder aus der Standardeingabe zu sortieren.

Nachfolgend finden Sie den Inhalt einer Datei mit dem Namen 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

Sie können einen einfachen Sortierbefehl ausführen, um den Dateiinhalt wie folgt zu sortieren:

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

Sie können den Befehl sort auf viele Arten verwenden. Lesen Sie einige der nützlichen Artikel zum Befehl sort wie folgt durch:

  1. 14 nützliche Beispiele für den Linux-Befehl „sort“ – Teil 1
  2. 7 interessante Beispiele für Linux-Sortierbefehle – Teil 2
  3. So finden und sortieren Sie Dateien nach Änderungsdatum und -uhrzeit
  4. So sortieren Sie die Ausgabe des Befehls „ls“ nach Datum und Uhrzeit der letzten Änderung

7. uniq-Befehl

Der Befehl uniq wird verwendet, um wiederholte Zeilen zu melden oder wegzulassen, er filtert Zeilen aus der Standardeingabe und schreibt das Ergebnis in die Standardausgabe.

Nachdem Sie sort für einen Eingabestream ausgeführt haben, können Sie wiederholte Zeilen mit uniq entfernen, wie im folgenden Beispiel gezeigt.

Um die Häufigkeit des Vorkommens einer Zeile anzugeben, verwenden Sie die Option -c und ignorieren Sie Unterschiede in der Groß-/Kleinschreibung beim Vergleich, indem Sie die Option -i einschließen:

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 

Weitere Nutzungsinformationen und Flags finden Sie in der Manpage von uniq:

man uniq

8. fmt-Befehl

fmt ist ein einfacher optimaler Textformatierer, der Absätze in der angegebenen Datei neu formatiert und die Ergebnisse in der Standardausgabe ausgibt.

Das Folgende ist der aus der Datei domain-list.txt extrahierte Inhalt:

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

Um den obigen Inhalt in eine Standardliste umzuformatieren, führen Sie den folgenden Befehl mit dem Schalter -w aus, mit dem die maximale Zeilenbreite definiert wird:

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-Befehl

Der Befehl pr konvertiert Textdateien oder Standardeingaben zum Drucken. Auf Debian-Systemen können Sie beispielsweise alle installierten Pakete wie folgt auflisten:

dpkg -l

Geben Sie den folgenden Befehl aus, um die Liste in druckfertigen Seiten und Spalten zu organisieren.

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

.....

Die hier verwendeten Flags sind:

  1. --column definiert die Anzahl der in der Ausgabe erstellten Spalten.
  2. -l gibt die Seitenlänge an (Standard sind 66 Zeilen).

10. tr-Befehl

Dieses Tool übersetzt oder löscht Zeichen aus der Standardeingabe und schreibt Ergebnisse in die Standardausgabe.

Die Syntax für die Verwendung von tr lautet wie folgt:

tr options set1 set2

Schauen Sie sich die folgenden Beispiele an. Im ersten Befehl stellt set1( [:upper:] ) die Groß- und Kleinschreibung der Eingabezeichen dar (alles in Großbuchstaben).

Dann stellt set2([:lower:]) den Fall dar, in dem sich die resultierenden Zeichen befinden. Im zweiten Beispiel ist es dasselbe und die Escape-Sequenz \n bedeutet, dass die Ausgabe in einer neuen Zeile gedruckt wird:

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. mehr Befehl

Der Befehl more ist ein nützlicher Filter zur Dateidurchsicht, der hauptsächlich für die Anzeige von Zertifikaten erstellt wurde. Es zeigt Dateiinhalte in einem seitenähnlichen Format an, in dem Benutzer [Enter] drücken können, um weitere Informationen anzuzeigen.

Sie können damit große Dateien wie folgt anzeigen:

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. weniger Befehl

less ist das Gegenteil des oben genannten Befehls more, bietet jedoch zusätzliche Funktionen und ist bei großen Dateien etwas schneller.

Verwenden Sie es auf die gleiche Weise wie mehr:

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
:

Erfahren Sie, warum „weniger“ schneller ist als „mehr“. Befehl für eine effektive Dateinavigation unter Linux.

Das ist vorerst alles. Teilen Sie uns über den Kommentarbereich unten alle nützlichen Befehlszeilentools mit, die hier nicht erwähnt werden und als Textfilter in Linux fungieren.