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.

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.

Sort-Optionen

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

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Verschlungene Pfade
    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.
  • Mehr Komfort
    Von einfachen Abfragen bis hin zu komplexen Menüs: Mit dem Toolkit Dialog bauen Sie eine grafische Oberfläche für Shell-Skripte, die oft nicht mehr als eine zusätzliche Zeile brauchen.
  • Einführung in die Bash-Programmierung
    Skripte sollen meist wiederkehrende oder lästige Arbeiten automatisieren. Die Standard-Shell Bash stellt Ihnen dazu eine ganze Reige von Funktionen bereit. Dieser Artikel erklärt, wie Sie ihre eigenen Shell-Skripte schreiben.
  • Kreislauf
    Schleifen ermöglichen das mehrmalige Abarbeiten von Anweisungen. Dabei kann das begrenzende Ereignis sowohl außerhalb als auch innerhalb der Schleife liegen.
  • Bash-Skripte sind Programme
    Wer regelmäßig mit der Shell arbeitet, wird leicht zum Programmierer: Schreiben Sie mehrere Shell-Befehle in eine Textdatei und machen diese ausführbar, haben Sie schon Ihr erstes Shell-Skript entwickelt. Die Shell bietet als Programmiersprache aber noch viel mehr.
Kommentare
Anmerkung zu $(( ... )) in der bash
Markus (unangemeldet), Sonntag, 19. März 2017 22:47:52
Ein/Ausklappen

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



Bewertung: 181 Punkte bei 11 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...