[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] }}} [github:chmln/sd:sd] steht für "'''s'''earch & '''d'''isplace" und ist ein in [https://www.rust-lang.org/ Rust] {en} 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 [wikipedia:Zeichenkette: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: {{{#!vorlage Befehl cargo install sd }}} [[Vorlage(Fremd, Software)]] = Benutzung = Die allgemeine Syntax von sd lautet: {{{#!vorlage Befehl sd [OPTIONEN] SUCHBEGRIFF ERSETZBEGRIFF [DATEI(EN)] }}} `SUCHBEGRIFF` wird standardmäßig als [https://docs.rs/regex/latest/regex/ regulärer Ausdruck] {en} 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 {{{#!vorlage 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: {{{#!vorlage Befehl echo 'Ubuntu ist (ganz) toll.' | sd '(ganz)' '(super)' }}} Ausgabe: {{{ Ubuntu ist ((super)) toll. }}} Da die Klammern bei regulären Ausdrücken eine [https://www.regular-expressions.info/brackets.html Capture Group] {en} 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: {{{#!vorlage Befehl 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: {{{#!vorlage 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": {{{#!vorlage Befehl echo '12,34' | sd '(?P\d+),(?P\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:chmln/sd: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 = * [github:chmln/sd:Github und Dokumentationsseite des Projekts] #tag: Shell, Rust