GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ersetzen von Zeichenfolgen in Bash

Bash ist ein UNIX-Shell-kompatibler Befehlsprozess, dessen Hauptaufgabe darin besteht, Zeichenfolgen zu manipulieren, die in einer Shell-Umgebung ausgeführt werden. Programmierer werden manchmal aufgefordert, an verschiedenen Dateien zu arbeiten. Sie können Teile oder die gesamte Datei entsprechend ihrer Arbeit hinzufügen, löschen und ersetzen. Dies erfordert das Wissen, Strings in Bash zu ersetzen. Die Datenspeicherung kann je nach Art der Daten temporär oder dauerhaft erfolgen. Datei-String ist wichtig, wenn Dateiinhalte ersetzt werden.

String in Bash ersetzen

gesendet ist wichtig und praktisch, um Zeichenfolgen in einer Datei durch Bash-Skripte zu ersetzen. Der String-Editor kann auf verschiedene Arten verwendet werden, um Dateiinhalte in der Bash zu ersetzen. Ein alternativer, aber solider String-Editor ist awk, der ins Spiel gebracht werden kann, wenn der String-Wert aus einer Datei mit Bash ersetzt wird. Dieser Artikel zeigt anhand von Beispielen, wie der Dateiinhalt in der Bash ersetzt werden kann. Beachten Sie, dass Kenntnisse in Regex-Mustern auch beim Ersetzen von Zeichenfolgen in Bash von großem Wert sein können.

Bash-String-Manipulation

Bei geringfügigen oder einfachen Ersetzungen ist die sed nicht erforderlich. Bash kann die Manipulation übernehmen.

Zum Beispiel:
Wenn Sie eine fosslinux.gif-Datei durch eine .mp4-Datei ersetzen, ist sed nicht erforderlich.
Um den Prozess mit Bash auszuführen, verwenden Sie den folgenden codierten Text:

#/bin/bash
file_name="fosslinux.gif"
new_extension="mp4"

# Replace .gif with .mp4
generated_file_name=${file_name/.gif/.$new_extension}

echo $generated_file_name

String mit sed ersetzen

sed kann als Stream-Editor bezeichnet werden. Sed kann eine Zeichenfolge in Dateien ersetzen. Sehen wir uns ein Beispiel für eine Datei namens singleboardbytes.txt an, die die folgenden Informationen enthält:
Foss Linux ist eine großartige Lernseite für jeden Linux-Benutzer. Sehen Sie sich Artikel an, die von Foss Linux auf ihrer Website veröffentlicht wurden.

Jetzt müssen wir aus unserer Datei das Wort „site“ ersetzen “ mit „Website “ und benennen Sie die Datei in fosslinux.txt um .

Die sed-Syntax verstehen

sed -i 's/search_string/replace_string/' filename
sed – is the command used in the execution of the above syntax
‘-i’ – used in the modification of contents in the original file with a replacement string aid whenever the search value exists in the file.
‘s’ – this is the substitute command
‘search_string’ – this represents the string value that is to be searched for replacement in the original file
‘replace_string’ – this represents the string value that is used to replace the searched value. The string should match the string found by the ‘search_string’ command.
‘filename’ – this is the filename whereby the replacement will be applied.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

sed 's/site/website/g' singleboardbytes.txt > fosslinux.txt

Hinweis:Sie können den obigen Befehl auch ausführen, indem Sie ihn als Bash-Skript anlegen.
Ersetzen mit dem -i Befehl

Nach dem Ausführen des Befehls ist der nächste Schritt das Ersetzen mit -i Befehl. -ich ist eine Darstellung für „an Ort und Stelle“, was bedeutet, dass die Datei nur ersetzt wird und keine zusätzlichen Dateien erstellt werden. Führen Sie unter Verwendung unseres obigen Beispiels den folgenden Befehl aus:

sed -i 's/site/website/g' singleboardbytes.txt

In der Abbildung unten sehen Sie ein Ausrufezeichen mit der Aufschrift „Die Datei „/home/tuts/singleboardbytes.txt auf der Festplatte geändert“. dies zeigt, dass die Änderungen erfolgreich vorgenommen wurden.

Die folgende Abbildung ist die Datei, die die Änderungen enthält, die im vorherigen Schritt vorgenommen wurden, sowohl am Namen der Datei (singleboardbytes.txt in fosslinux.txt) als auch am Wort site wurde auf die Website geändert .

Eine Variable als Such- und Ersetzungswert verwenden

Mit ein wenig Interpolation können Variablen verwendet werden, um Zeichenfolgen zu ersetzen. Das erste sed-Argument muss in diesem Fall doppelte Anführungszeichen anstelle von einfachen Anführungszeichen verwenden. Ihr Code wird beispielsweise dem folgenden ähneln:

tuts() {
local search=$1
local replace=$2

# Note the double quotes
sed -i "s/${search}/${replace}/g" singleboardbytes.txt
}

sed hat zwei Varianten, nämlich:das FreeBSD und der Linux sed . Die Linux-Distributionen verwenden die Linux-Sed, während OS X-Benutzer die FreeBSD-Sed verwenden. Diese Geschmacksrichtungen sind ziemlich unterschiedlich, und daher kann man keine Befehle von einer sed-Variante auf eine andere übertragen.

Wenn Sie beispielsweise den Inhalt der Datei mit FreeBSD ersetzen, sollte ein Backup mit der Erweiterung .bak durchgeführt werden. Oder Sie können eine Sicherung mit leeren Anführungszeichenpaaren direkt nach der Notation -i initiieren, wie in der folgenden Bash-Syntax gezeigt:

tuts() {
local search=$1
local replace=$2

sed -i "" "s/${search}/${replace}/g" singleboardbytes.txt
}

Wenn während der Verwendung von FreeBSD kein Backup erstellt wird, wie im obigen Syntaxcode dargestellt, tritt ein Fehler wie der unten gezeigte auf:

sed: 1: "/Users/user/path/tuts ...": extra characters at the end of h command

Wie man eine Datei ersetzt und das Ziffernmuster mit dem Befehl sed abgleicht

Wenn Sie das Skript erfolgreich ausführen, wird nach allen in einer Datei vorhandenen numerischen Inhalten gesucht. Dann wird der Inhalt durch das Hinzufügen von $ vor den Zahlen ersetzt.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string containing digits and add $
sed -i 's/\b[0-9]\{5\}\b/$&/g' $1
fi
hinzufügen

Ersetzen eines Strings mit dem awk-Befehl

In diesem Fall verwenden wir den awk-Befehl anstelle des sed-Befehls, um den Inhalt einer Datei zu ersetzen. Der Unterschied zwischen diesen Befehlen besteht darin, dass der Befehl sed die Originaldatei direkt aktualisiert, was beim Befehl awk nicht der Fall ist.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string based on date
awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1
fi

Schlussfolgerung

Die obigen Beispiele sind entscheidend für Ihren Fortschritt beim Erlernen des Ersetzens einer Zeichenfolge in Bash. Um gut darin zu sein, müssen Sie daher regelmäßig üben. Das Suchen und Ersetzen von Zeichenfolgen in einer Datei mag komplex erscheinen, aber Sie werden feststellen, dass es viel einfacher zu handhaben ist, wenn Sie unsere Richtlinien korrekt befolgen.

Zu beachten ist, dass das Ausführen der Befehle manchmal überschaubarer erscheinen mag, aber Sie sollten darauf achten, kein Chaos durch sed anzurichten. Wenn Sie die falschen Befehle eingeben, beschädigen Sie Ihren Computer und verursachen weitere Probleme wie Datenverlust. Kopieren Sie daher sicherheitshalber den Code immer so, wie er ist, und fügen Sie ihn in Ihr Terminal ein. Dies verhindert Rechtschreibfehler, die Ihre Maschine beschädigen könnten. Wir hoffen, dass dieser Artikel Ihnen dabei geholfen hat, mithilfe dieses Artikels zu lernen, wie man eine Zeichenfolge in Bash ersetzt.


Linux
  1. Wie ersetze ich eine Zeichenfolge in einer oder mehreren Dateien?

  2. Die Bash‘?

  3. Verwenden einer Referenz auf eine Bash-String-Variable in Sed?

  4. Wie füge ich in Bash nach jeder Zeile in einer Datei eine Zeichenfolge hinzu?

  5. Wie kann ich am Anfang jeder Datei in einem Ordner in Bash eine Zeichenfolge hinzufügen?

Bash:An Datei anhängen

35 Bash-Skriptbeispiele

Bash-Scripting – String-Manipulation

Bash-Scripting(III)

Ersetzen einer Teilzeichenfolge durch eine andere Zeichenfolge in Bash

So verwenden Sie Sed zum Suchen und Ersetzen einer Zeichenfolge in einer Datei