2016-08-06 10 views
0

mein Text wie folgt aussieht untensed, erstes Auftreten Spiel der ersten Zeile ersetzen

this This that 
it It Its 
my My Mine 
this This that 
it It Its 
my My Mine 

Ich mag die erste Zeile des ersten Auftreten Spiels ersetzen. z.B. Passen Sie die Zeile, die my enthält, dann ersetzen Sie die Zeile. Ich tat

cat txt|sed "0,/my/c\my changed line" txt 

Der Druck aus sieht unter, die ersten 2 Zeile sind getrimmt.

my changed line 
this This that 
it It Its 
my My Mine 

wenn ich das laufen cat txt|sed "s/my/changeline/" txt

Die folgende Ausgabe

ist
this This that 
it It Its 
changeline My Mine 
this This that 
it It Its 
changeline My Mine 

Wie kann ich das Ergebnis zu erhalten, wie unten?

this This that 
it It Its 
changeline My Mine 
this This that 
it It Its 
my My Mine 

Antwort

1

sed Verwendung:

sed '0,/.*my.*/s//my changed line/' file 

Was dies bedeutet, im Bereich von 0,/.*my.*/ wird das angepasste .*my.* mit "meiner geänderten Linie" ersetzen.

Ein äquivalenter etwas einfache Version der gleichen Sache zu verstehen:

sed '0,/my/{/.*my.*/s//my changed line/}' file 

awk die die Logik ist etwas leichter zu verstehen:

awk '!/my/ || seen { print } /my/ && !seen { print "my changed line"; seen = 1 }' file 
1
$ awk '/my/ && !f++{$0="changeline My Mine"} 1' file 
this This that 
it It Its 
changeline My Mine 
this This that 
it It Its 
my My Mine 
Verwandte Themen