So suchen Sie mit sed nach '/>'

So suchen Sie mit sed nach '/>'

/>Ich muss für alle Dateien in einem Verzeichnis nach der ersten Zeichenfolge eine neue anhängen .

Hier ist mein Skript:

#!/bin/bash

find ./ -type f -print0 | while IFS= read -r -d '' myfile; do
    sed -i '0,/\/>/asome text here' $myfile
done

Es scheint jedoch, dass alle \nübereinstimmen. Wenn eine Datei beispielsweise so aussieht:

abc
def
<abc/>
<abc/>

Nach der Ausführung meines Skripts erhalte ich das folgende Ergebnis:

abc
some text here
def
some text here
<abc/>
some text here
<abc/>

Es hängt die neue Zeichenfolge zwar beim ersten Vorkommen von an />, aber es hängt die neue Zeichenfolge />auch für jede Zeile vor der ersten an.

Antwort1

Ja. Der Ausdruck 0,/regex/bewirkt, dass der darauf folgende Befehl ( a) angewendet wird aufalle Linienbis (und einschließlich) zur ersten Übereinstimmung des regulären Ausdrucks.

Ich vermute, Sie würden stattdessen

sed -i '0,/regex/{//a text
}' "$myfile"

Dadurch werden alle Zeilen bis zur ersten Übereinstimmung mit dem regulären Ausdruck ausgewählt und der Befehl dann nur auf die Zeile innerhalb dieses Bereichs angewendet, die mit dem Ausdruck übereinstimmt, während alle anderen Zeilen unverändert durchgelassen werden.

Der wörtliche Zeilenumbruch wird benötigt, um das Ende des hinzugefügten Textes zu signalisieren.

verwandte Informationen