sd
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
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.
Links¶