Aus Raspberry Pi Geek 02/2018

Shell-Workshop, Teil 3 (Seite 3)

Sie sprechen dabei die Felder über deren Position im Datensatz an: Dabei steht $1 für das erste Feld, $2 für das zweite und so weiter. Die Variable $0 enthält den kompletten Datensatz.

Listing 8

 

#!/bin/bash
# Darstellung einzelner Spalten aus einer
# strukturierten Textdatei mittels awk
awk -F\: '{ print $2" "$4" "$1 }' Adressen.txt

Textdateien zerlegen

Neben den Tools, die auf den Zeilen wie auf einem Datensatz arbeiten, gibt es solche, die Textdateien zeilenweise manipulieren. Diese Programme geben einzelne Zeilen oder Bereiche einer Textdatei aus. Mit head -Zeile geben Sie entsprechend dem Wert von Zeile eine definierte Anzahl von Zeilen vom Anfang einer Datei aus, mit tail -Zeile klappt das vom Ende der Datei aus.

Kombinieren Sie beide, besteht die Möglichkeit, sogar gezielt eine einzige Zeile auszuwählen. Dazu gehen Sie vom Kopf her mit head heran und geben als Zahl die Zeile an, die Sie benötigen. Mittels tail -1 in der Pipe unterdrücken Sie dann alle anderen Zeilen.

Dieses Beispiel mag zwar wegen zweier benötigter Befehle umständlich erscheinen, aber die einfache Syntax gleicht den Nachteil sicher wieder aus (Listing 9). Das Programm hat die Aufgabe, die dritte Zeile unserer Adressdatei mit den Daten von Herrn Müller wiederzugeben.

Listing 9

 

#!/bin/bash
# Auslesen der dritten Zeile
head -3 < Adressen.txt | tail -1

Alternativ nutzen Sie den Stream-Editor Sed zum Ausschneiden von Zeilen. Damit sprechen Sie die gewünschte Zeile direkt an (Listing 10). Als Parameter übergeben Sie einen Bereich von Zeilen, in unserem Beispiel von Zeile 3 bis Zeile 3. Außerdem erwartet Sed eine Handlungsanweisung, in unserem Fall eine Ausgabe (p, “print”).

Listing 10

 

#!/bin/bash
# Holen der Zeile 3 mit sed
sed -ne '3,3p' Adressen.txt

Suchen und Ersetzen

Einzelne Zeichen oder ganze Zeichenklassen löschen oder ersetzen Sie mit dem Befehl tr. Die entsprechende Option lautet -d. Die Klassen, die Sie dabei verwenden dürfen, finden Sie in der Tabelle “Zeichenklassen”.

Zeichenklassen

Klasse

Zeichen

[:alnum:]

alphanumerische Zeichen

[:alpha:]

Buchstaben

[:cntrl:]

Steuerzeichen

[:digit:]

Zahlen

[:graph:]

Grafikzeichen

[:lower:]

Kleinbuchstaben

[:print:]

druckbare Zeichen

[:punct:]

Satzzeichen

[:space:]

Leerzeichen

[:upper:]

Großbuchstaben

[:xdigit:]

Hexadezimalzahlen

Listing 11 zeigt den Einsatz des Tools in der Praxis. Shell-Skripte für den Zugriff auf Datenbanken oder zum Erfassen von Daten benötigen oft eine Funktion, um den Dezimaltrenner gegen ein Komma auszutauschen. Das erlaubt numerische Eingaben mit dem Ziffernblock der Tastatur. Feldtrennern und anderen Sonderzeichen maskieren Sie mittels Backslash (\).

Listing 11

 

#!/bin/bash
# Dezimaltrenner tauschen
# als Funktion
dezimal () {
  a=$(echo $a | tr \. \,)
}
a=12.34
echo " Vor Funktion: $a"
dezimal
echo "Nach Funktion: $a"
echo "-"
# Feldtrenner durch Tabulatoren ersetzen
tr \: \\t < Adressen.txt
echo -e "\n--"
# Umstellung auf Großschreibung, Methode mit
# Zeichendefinitionen, nur erste Zeile wird
# ausgegeben, Sonderbehandlung ß
head -1 < Adressen.txt | tr a-zäöü A-ZÄÖÜ | tr ß SS
echo "---"
# Umstellung auf Großschreibung,
# kürzere Methode, nur erste Zeile
# wird ausgegeben, Sonderbehandlung ß
head -1 < Adressen.txt | tr [:lower:] [:upper:] | tr ß SS
echo "----"
# Löschen eines Zeichens, hier ":"
head -1 < Adressen.txt | tr -d \:

Mit Sed suchen und ersetzen

Der Stream-Editor, kurz Sed, arbeitet als Filter. Dabei beherrscht er die grundsätzlichen Operationen zum Suchen, Ersetzen, Anfügen und Löschen, die Sie bei Bedarf kombinieren. Das Programm agiert weder interaktiv, noch kann es Dateien zum Lesen und Bearbeiten öffnen.

Ein typischer Sed-Befehl liest sich auf den ersten Blick etwas kryptisch. Zudem ist das Konzept als solches anfangs gewöhnungsbedürftig, da die Syntax vom üblichen Baukastensystem der Shell-Befehle abweicht. Die Tabelle “Sed-Operationen” zeigt zusammenfassend alles Wichtige.

Sed-Operationen

Befehl/Option

Wirkung

-e

Bearbeiten

-n

Ausgabe der restlichen Daten während des Verarbeitens unterdrücken

-f

Angabe einer Skript-Datei

Editier-Anweisungen

'Zeilennummerd'

Löschen

s'/Alt/Neu/s-Anweisung'

Suchen und Ersetzen

'/Suchbegriff/p'

Suchen

'Zeilennummer,Zeilennummerp'

Ausgeben nach Zeilennummer

Zusatzanweisung für Suchen und Ersetzen

g

Ersetzen aller übereinstimmender Suchmuster

p

Ausgabe des geänderten Puffers

wDatei

Ergebnis in Datei schreiben

Listing 12 zeigt einige Beispiele aus der Praxis. Zum einen ist wieder der Tausch Punkt gegen Komma Thema, eine Aufgabe, die Sie in Listing 11 mittels Tr erledigt haben. Diese Anwendung fungiert auch in diesem Skript wieder als Funktion.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben