ubuntuusers.de

sd

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

sd steht für "search & displace" und ist ein in Rust 🇬🇧 geschriebenes Kommandozeilenprogramm. sd bietet eine ähnliche Funktionalität für das Suchen und Ersetzen in textbasierten Dateien wie sed, hat aber eine einfachere Syntax. Nach Angaben der Entwickler arbeitet sd auch (deutlich) schneller als sed.

Dazu liest sd eine Datei ein (oder alternativ einen Textstring aus der Standardeingabe), sucht und ersetzt Worte gemäß dem vorgegeben Muster in der Datei und schreibt diese direkt wieder.

Installation

sd ist nicht in den Paketquellen enthalten, kann aber über den Rust-Paketmanager cargo installiert werden:

cargo install sd 

Hinweis!

Fremdsoftware kann das System gefährden.

Benutzung

Die allgemeine Syntax von sd lautet:

sd [OPTIONEN] SUCHBEGRIFF ERSETZBEGRIFF [DATEI(EN)] 

SUCHBEGRIFF wird standardmäßig als regulärer Ausdruck 🇬🇧 interpretiert, ERSETZBEGRIFF ist ein String. Die Syntax für regulären Ausdrücke ist identisch mit der auch Python und JavaScript verwendeten.

Das Suchen und Ersetzen wird direkt in der Datei vorgenommen, d.h. es passiert direkt und ohne weitere Rückfragen. Wird keine Datei angegeben, wird von der Standardeingabe gelesen und auf die Standardausgabe geschrieben.

Der Befehl

sd 'Ubuntu' 'Xubuntu' releases.txt 

würde z.B. in der Datei releases.txt alle Vorkommen von Ubuntu durch Xubuntu ersetzen.

Da wie gesagt der SUCHBEGRIFF standardmäßig als regulärer Ausdruck interpretiert wird, liefert das folgende Beispiel nicht das gewünschte Ergebnis:

echo 'Ubuntu ist (ganz) toll.' | sd '(ganz)' '(super)' 

Ausgabe:

Ubuntu ist ((super)) toll.

Da die Klammern bei regulären Ausdrücken eine Capture Group 🇬🇧 darstellen, wird nur das Wort ganz durch (super)ersetzt. sd kann diese Ersetzung dennoch durchführen, wenn man die Option -s nutzt. Diese weist sd an, den SUCHBEGRIFF als String zu interpretieren und nicht als regulären Ausdruck:

echo 'Ubuntu ist (ganz) toll.' | sd  -s '(ganz)' '(super)' 

Ausgabe:

Ubuntu ist (super) toll.

Das Entfernen von Leerzeichen an Zeilenenden in einer Datei erledigt der folgende Befehl:

sd '\s+$' '' datei.txt 

Der regulärer Ausdruck \s+$ steht für: ein oder mehrere (+) Whitespaces (\s) am Ende ($) der Zeile.

Wenn man '', also kein Zeichen, als ERSETZBEGRIFF einsetzt, wird der SUCHBEGRIFF einfach entfernt.

sd kann alle Möglichkeiten von regulären Ausdrücken nutzen, das folgende Beispiel nutzt "named capture groups":

echo '12,34' | sd '(?P<euro>\d+),(?P<cent>\d+)' '$euro Euro und $cent Cent' 

Ausgabe:

12 Euro und 34 Cent

Ist man sich nicht sicher, ob man den richtigen Such- und Ersetzbegriff verwendet, kann man sich den Vorgang auch simulieren lassen, indem man die Option -p nutzt. Damit gibt das Programm lediglich das zu erwartende Ergebnis auf die Standardausgabe aus, führt aber keine Änderungen an der Datei selbst durch.

Weitere Beispiele findet man auf der Github Seite des Projekts. Ruft man die Hilfe vom sd mittels sd --help auf, erhält man eine Übersicht über weitere Optionen, die das Programm kennt.

Diese Revision wurde am 11. Januar 2023 13:04 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell, Rust