2016-10-28 11 views
0

ich unten verwenden, um Text auf Zeilennummern 29 to 32 zu ersetzen:ersetzt bestimmte Zeilennummern sed mit

sed -i '29,32 s/^ *#//' file 

Wie kann ich weitere Zeilennummern heißt Zeile 35 to 38, Linie 43 & Linie 45 in obigem Befehl?

+0

könnte besser sein AWK 'awk verwenden‚NR> 28 && NR < 32 || NR > 34 && NR <39 || NR == 43 || NR == 45 {#do gsub #} 'Datei ' – VM17

+0

@VarunM Danke für die Alternative, aber ich werde mit unter Antwort gehen. –

Antwort

2

Mit GNU sed. m ist hier ein Etikett.

sed -i '29,32bm;35,38bm;43bm;45bm;b;:m;s/^ *#//' file 

Von man sed:

b label: Branch Etikett; Wenn das Label weggelassen wird, verzweigen Sie zum Ende des Skripts.

: label: Bezeichnung für b- und t-Befehle.

+0

Großartig! Funktioniert wie Charme .. Danke :) –

0

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

cat <<\! | sed 's:$:s/^ *#//:' | sed -f - -i file 
29,32 
35,38 
43,45 
! 

erstellen hier-Dokument mit der Linie Bereiche, die Sie wünschen und diese zu einem sed-Skript übergeben, die ein anderes sed-Skript erstellt, das gegen ausgeführt wird die gewünschte Datei.

Die hier-Dokument könnte durch eine Datei ersetzt werden:

sed 's:$:s/^ *#//:' lineRangeFile | sed -f - -i file 
+0

Danke @potong für Alternative. Ich ging mit der obigen Lösung. –

Verwandte Themen