So ersetzen Sie Zahlen dynamisch mit sed unter Linux
Der Befehl sed, kurz für Stream Editor, ist ein leistungsstarkes Textverarbeitungswerkzeug in Linux, das häufig für Textbearbeitungsaufgaben verwendet wird, einschließlich des Suchens, Suchens und Ersetzens von Text und sogar der Durchführung erweiterter Skripterstellung.
Dieser Artikel führt Sie durch die Grundlagen von sed, erklärt, wie Sie es für die dynamische Zahlenersetzung verwenden und gibt praktische Beispiele für Anfänger.
Was ist sed?
Der Befehl sed verarbeitet Text Zeile für Zeile und ermöglicht Ihnen Folgendes:
- Suche nach bestimmten Mustern.
- Ersetzen Sie Text oder Zahlen.
- Löschen oder Einfügen von Zeilen.
- Transformieren Sie Text auf verschiedene Arten.
Es arbeitet nicht-interaktiv, was bedeutet, dass es Dateien oder Textströme ohne manuelle Eingriffe verarbeiten kann.
Grundlegende Syntax des Befehls sed
sed [options] 'command' file
Erklärung:
options: Zusätzliche Flags, um das Verhalten von sed zu ändern.command: Die auszuführende Operation (z. B. Substitution).file: Die zu verarbeitende Datei (optional, wenn die Standardeingabe verwendet wird).
Dynamisches Ersetzen von Zahlen durch sed
Bei der dynamischen Zahlenersetzung werden Zahlen im Text identifiziert und basierend auf bestimmten Bedingungen oder Mustern ersetzt.
So können Sie dies mit sed erreichen.
1. Ersatz der Basisnummer
Sie können eine bestimmte Nummer in einer Datei mit dem Substitutionsbefehl s ersetzen:
sed 's/old_number/new_number/' file
Erklärung:
old_number: Die Nummer, die Sie ersetzen möchten.new_number: Die Nummer, durch die sie ersetzt werden soll.
Beispiel:
echo "The price is 100 dollars." | sed 's/100/200/'
The price is 200 dollars.
2. Alle Nummern ersetzen
Um alle Vorkommen einer beliebigen Zahl zu ersetzen, verwenden Sie einen regulären Ausdruck:
sed 's/[0-9]\+/new_number/g' file
Erklärung:
[0-9]\+: Entspricht einer oder mehreren Ziffern.g: Ersetzt alle Übereinstimmungen in einer Zeile (globale Ersetzung).
Beispiel:
echo "The items cost 100, 200, and 300 dollars." | sed 's/[0-9]\+/0/g'
The items cost 0, 0, and 0 dollars.
3. Dynamisches Inkrementieren von Zahlen
Mit sed können Sie Zahlen dynamisch inkrementieren, indem Sie es mit Shell-Befehlen wie awk oder bash-Arithmetik kombinieren.
echo "Item 1 costs 100, item 2 costs 200." | sed -E 's/[0-9]+/echo $((echo "Item 1 costs 100, item 2 costs 200." | sed -E 's/[0-9]+/echo $((\0 + 10))/ge'
Item 1 costs 110, item 2 costs 210.
Erklärung:
-E: Aktiviert erweiterte reguläre Ausdrücke.\0: Bezieht sich auf die übereinstimmende Zahl.e: Führt die Ersetzung als Befehl aus.
4. Ersetzen von Nummern basierend auf Bedingungen
Um Zahlen nur dann zu ersetzen, wenn sie einer Bedingung entsprechen (z. B. größer als ein bestimmter Wert), verwenden Sie eine Kombination aus sed und einem skriptfähigen Befehl wie awk.
echo "Scores: 45, 85, 100" | sed -E 's/[0-9]+/test echo "Scores: 45, 85, 100" | sed -E 's/[0-9]+/test \0 -gt 50 \&\& echo High || echo Low/e'
Scores: Low, High, High
Erklärung:
test \0 -gt 50: Überprüft, ob die Zahl größer als 50 ist.echo High || echo Low: Gibt "High" für Zahlen größer als 50 aus, andernfalls "Low".
5. Versionsnummern ersetzen
Sie verfügen über eine folgende Konfigurationsdatei (config.txt) mit Versionsnummern, die Sie dynamisch aktualisieren müssen.
AppVersion: 1.2.3
LibraryVersion: 4.5.6
Dynamisches Aktualisieren von Versionsinformationen in einer Konfigurationsdatei.
sed -E 's/[0-9]+\.[0-9]+\.[0-9]+/2.0.0/' config.txt
Ausgang:
AppVersion: 2.0.0
LibraryVersion: 2.0.0
6. Fügen Sie den Zahlen einen Prozentsatz hinzu
In diesem Beispiel verfügen Sie möglicherweise über eine Datei (prices.txt) mit den Preisen verschiedener Artikel, und Sie möchten alle Preise um einen bestimmten Prozentsatz erhöhen, z. B. 10 %.
Item1: 100
Item2: 200
Item3: 300
In der obigen Datei haben Sie eine Liste von Artikeln mit ihren jeweiligen Preisen und möchten jeden Preis um 10 % erhöhen, indem Sie Folgendes verwenden:
sed -E 's/[0-9]+/echo $((sed -E 's/[0-9]+/echo $((\0 + (\0 * 10 / 100)))/ge' prices.txt
sed -E 's/[0-9]+/echo $((\0 + (\0 * 10 / 100)))/ge' prices.txt
Ausgang:
Item1: 110
Item2: 220
Item3: 330
Schlussfolgerung
Die dynamische Nummernersetzung mit sed unter Linux ist eine vielseitige Fähigkeit für jeden Linux-Benutzer oder Systemadministrator. Wenn Sie die grundlegende Syntax von sed verstehen und sie mit regulären Ausdrücken und Shell-Befehlen kombinieren, können Sie verschiedene Textbearbeitungsaufgaben effizient bewältigen.