Ersetzen Sie nur, wenn in der aktuellen Zeile ein String vorhanden ist
Habe ich eine Zeile wie:
sed -i 's/mystring/newstring/' $target
Dieser Befehl ändert alle mystring
zu newstring
.
Was ich will ist jetzt: wenn das Programm sieht mystring
wie kann ich prüfen, ob die aktuelle Zeile, wenn string searchstring
existiert oder nicht? Wenn es vorhanden ist, newstring
ist 1
; andernfalls newstring
ist 0
.
InformationsquelleAutor der Frage Anders Lind | 2012-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösung
Vorausgesetzt, Ihr input Datei $target enthält die folgenden:
Dieser Befehl:
wird ändern Ihre Inhalte zu:
Erklärung
Das Skript enthält zwei Ersatz (s) Befehle durch ein Semikolon getrennt.
Den ersetzen-Befehl akzeptiert eine optionale Adressbereich, wählen Sie die Zeilen, die die substitution stattfinden soll.
In diesem Fall regexp - Adresse verwendet wurde, um wählen Sie eine Zeile mit dem searchstring für den ersten Befehl; und die Zeilen, die nicht enthalten, die searchstring (beachten Sie das Ausrufezeichen nach dem regexp negieren match) für die zweite.
Bearbeiten
Diesem Befehl wird eine bessere Leistung und produzieren nur das gleiche Ergebnis:
Der Punkt ist, dass Befehle, die nacheinander ausgeführt werden und damit, wenn es noch eine mystring Teilstring in der aktuellen Zeile nach der erste Befehl fertig ist, dann ist es nicht searchstring in es sicher.
Großes Lob an user946850.
InformationsquelleAutor der Antwort Ihor Kaharlichenko
Dies ist aus der sed Einzeiler Seite:
Geschwindigkeit ist nicht das Thema der Frage in der hand, aber die syntax-Hinweise helfen bei der Formulierung der Lösung:
InformationsquelleAutor der Antwort krlmlr