Summe
GNU-Syntax:
sed '/claudio/{s//claudia/;:p;n;bp}' file
Oder sogar (um das zu ersetzende Wort nur einmal zu verwenden:
sed '/\(claudi\)o/{s//\1a/;:p;n;bp}' file
Oder in POSIX-Syntax:
sed -e '/claudio/{s//claudia/;:p' -e 'n;bp' -e '}' file
Funktioniert auf jedem sed, verarbeitet nur so viele Zeilen wie nötig, um die erste zu finden. Funktioniert claudio
auch, wenn claudio
sich diese in der ersten Zeile befindet und ist kürzer, da nur eine reguläre Zeichenfolge verwendet wird.
Detail
Um nur eine Zeile zu ändern , müssen Sie nur eine Zeile auswählen .
Mit einem 1,/claudio/
(aus Ihrer Frage) auswählen:
- aus der ersten Zeile (unbedingt)
- zur nächsten Zeile, die die Zeichenfolge enthält
claudio
.
$ cat file
claudio 1
antonio 2
claudio 3
michele 4
$ sed -n '1,/claudio/{p}' file
claudio 1
antonio 2
claudio 3
Verwenden Sie zum Auswählen einer Zeile, die Folgendes enthält claudio
:
$ sed -n `/claudio/{p}` file
claudio 1
claudio 3
Und um nur den ersten claudio
in der Datei auszuwählen , verwenden Sie:
sed -n '/claudio/{p;q}' file
claudio 1
Dann können Sie eine Ersetzung nur in dieser Zeile vornehmen:
sed '/claudio/{s/claudio/claudia/;q}' file
claudia 1
Dies ändert nur das erste Vorkommen der Regex-Übereinstimmung in der Zeile, auch wenn es in der ersten Zeile mehr als eine gibt, die mit der Regex übereinstimmt.
Natürlich /claudio/
könnte der reguläre Ausdruck vereinfacht werden, um:
$ sed '/claudio/{s//claudia/;q}' file
claudia 1
Dann fehlt nur noch, dass alle anderen Zeilen unverändert gedruckt werden:
sed '/claudio/{s//claudia/;:p;n;bp}' file
info sed
: (0,/REGEXP/
: Eine Zeilennummer 0 kann wie in einer Adressangabe verwendet werden ,0,/REGEXP/
so dasssed
versucht wird REGEXP in der ersten Eingangsleitung paßt auch mit anderen Worten.0,/REGEXP/
Ist Ähnlich1,/REGEXP/
, außer dass, wenn ADDR2 mit der allerersten Eingabezeile übereinstimmt, das Formular 0 / REGEXP / das Ende des Bereichs berücksichtigt, wohingegen das Formular 1 / REGEXP / mit dem Beginn des Bereichs übereinstimmt und daher die Bereichsspanne festlegt bis zum zweiten Vorkommen des regulären Ausdrucks)