Aus LinuxUser 04/2017

Shell-Workshop, Teil 3 (Seite 4)

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.

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.

Darüber hinaus sehen Sie den Tausch eines Feldtrenners. Gerade beim Arbeiten mit CSV-Dateien und Skripten für Datenbanken erledigen Sie auf diese Weise viele Vorgänge. Als letzte Aufgabe löscht das Skript ein Zeichen.

Listing 12

#!/bin/bash
# Dezimaltrenner austauschen als Funktion.
# Punkt muss für Sed als Sonderzeichen
# entwertet werden.
dezimal () {
  a=$(echo $a | sed s'/\./,/g')
}
a=12.34
echo " Vor Funktion: $a"
dezimal
echo "Nach Funktion: $a"
echo "-"
# Feldtrenners gegen Tabulatoren tauschen
sed s'/\:/\t/g' Adressen.txt
echo -e "\n--"
# Löschen eines Zeichens, hier ":"
head -1 < Adressen.txt | sed s'/\://g'

Text sortieren

Gerade im Zusammenhang mit CSV-Dateien, Datenbanken und mit dem Befehl uniq, mit dem Sie mehrfach vorkommende, identische Zeilen filtern, benötigen Sie den Befehl sort: Er bringt das Ausgangsmaterial in einem ersten Schritt in eine geordnete Form. Die Tabelle „Sort-Optionen“ zeigt einige der umfangreichen Möglichkeiten.

Option

Aktion

-b

führende Leerzeichen ignorieren

-c

prüfen, ob Datei bereits sortiert ist

-f

Groß/Kleinschreibung ignorieren

-m

sortierte Dateien zusammenführen

-o Datei

Ergebnis in Datei umleiten

-r

in umgekehrter Reihenfolge sortieren

-n

numerisch sortieren

-t'Trenner'

Angabe des Feldtrenners

-u

mehrfach vorhandene Zeilen nur einmal ausgeben

Listing 13 zeigt drei Beispiel: Zunächst sortiert das Skript die Adressdatei alphanumerisch aufsteigend, anschließend rückwärts. Im dritten Beispiel sehen Sie, wie Sie bei strukturierten Textdateien eine Spalte angeben, die als Sortierkriterium dient. Dazu müssen Sie zusätzlich den Feldtrenner benennen.

Listing 13

#!/bin/bash
echo "Normal sortiert:"
sort < Adressen.txt
echo "--------------------"
echo "umgekehrt:"
sort -r < Adressen.txt
echo "--------------------"
echo "nach Nummer (Feld 6)"
sort -t':' -n -k6 < Adressen.txt
echo "--------------------"

Zeilen nummerieren

In einigen Fällen kann der Bedarf entstehen, die Zeilen von Textdateien zu nummerieren. Das erledigen Sie mittels nl. Die Tabelle „Nl: Optionen“ führt die wichtigsten Optionen auf, Listing 14 zeigt einige Praxisbeispiele. Im Alltag versehen Sie damit vorsortierte Dateien mit eindeutigen Zeilennummern. Das hilft vor allem dann, wenn Sie über diverse Suchfunktionen gezielt einzelne Zeilen ansprechen müssen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
LinuxUser 04/2017 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu:

Die Variablen innerhalb der doppelten Klammern müssen nicht nochmals mit $ angegeben werden, die bash verträgt auch direkt den Namen:

i=5
echo $((i*2))