2012-09-21 29 views
10

Wie kann ich eine Zeichenfolge ersetzen, sondern nur in der ersten Zeile der Datei mit dem Programm "sed"?sed ersetzen string in einer ersten Zeile

Die Befehle s/test/blah/1 und 1s/test/blah/ scheinen nicht zu funktionieren. Gibt es eine andere Art und Weise?

+1

was '1s/test/blah /' "funktioniert nicht"? –

Antwort

2

Dies wird es tun:

sed -i '1s/^.*$/Newline/' textfile.txt 

Failing, dass das Spiel einzigartig machen, nur um sicher ist man nur an die Leitung:

sed -i 's/this is line one and its unique/Changed line one to this string/' filename.txt 

Die -i Option, um die Änderung an der Datei, anstatt nur die Anzeige schreibt die Ausgabe nach stdout.

EDIT:

Um die ganze Linie zu ersetzen durch den gemeinsamen String-Matching wäre:

sed -i 's/^.*COMMONSTRING$/Newline/' 

Wo ^ den Anfang der Zeile passt, passt $ das Ende der Linie und .* passt alles bis COMMONSTRING

+0

die Zeile ist immer anders mit einer gemeinsamen Zeichenfolge am Ende, aber Sie gaben mir eine Idee, wie das zu lösen, danke! ;) – irek

20

Dies könnte für Sie arbeiten (GNU sed):

sed -i '1!b;s/test/blah/' file 

wird nur die erste test für blah nur in der ersten Zeile ersetzen.

Oder wenn Sie wollen einfach nur Änderung die erste Zeile:

sed -i '1c\replacement' file 
+0

Oldschool antwort. Mögen. Upvote! – lzap

+1

Übrigens funktioniert es auch ohne "! B;" - wofür ist das? – lzap

+4

@lzap "1! B" = wenn 'nicht' in Zeile' 1' dann 'b'ranch zum Ende von Skript –