Website-Suche

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.

Verwandte Artikel:



Alle Rechte vorbehalten. © Linux-DE.com • 2024-2026