2016-05-12 3 views
0

Ich suche nach einem sed-Befehl, um eine Arch Linux Spiegeldatei zu bearbeiten. Dieser Befehl sollte für eine # kommentierte Ländernamen wie #germany und Kommentar- der folgenden acht# kommentierten Zeilen suchen.Sed-Befehl zum Suchen einer Zeile und zum Auskommentieren folgender Zeilen

Jede Hilfe wird geschätzt.

Beispiel:

vor:

#Germany 
#hostA 
#hostB 
... 
#hostH 
#hostI 
... 
#hostZ 

nach:

#Germany 
hostA 
hostB 
... 
hostH 
#hostI 
... 
#hostZ 
+1

Bitte geben einige Beispiel-Eingangsleitungen von der Datei zusammen mit der gewünschten Ausgabe. –

+0

Fertig. Beispiel wie gewünscht hinzugefügt. –

Antwort

3

GNU sed Verwenden Sie so etwas wie

gsed '/#Germany/,+4{/#Germany/ n; s/^#//}' 

tun können 10

Beispiel

$ cat test 
Some 
random 
stuff 

#Germany 
#1 
#2 
#3 
#4 

$ gsed '/#Germany/,+4{/#Germany/ n; s/^#//}' test 
Some 
random 
stuff 

#Germany 
1 
2 
3 
4 

Was sie tut

  • '/#Germany/,+4 Dies ist ein Adressmuster. Es entspricht der ersten #Germany und 4 Zeilen danach. Wenn es übereinstimmt, führt es die Befehle für dieses Muster aus

  • /#Germany/ n; Wenn es der Name des Landes ist, können wir es nicht ersetzen. n steht für next, es liest die nächste Zeile zum Puffer.

  • s/^#// Ersetzt # mit nichts.

2

ähnlich in awk

$ awk 'c&&c--{sub(/^#/,"")} /#Germany/{c=8} 1' file 
+0

Ich habe den Befehl von * nullp01n73R * gewählt, weil die Frage nach ** sed ** fragt. Trotzdem danke. –

+1

Wenn die Frage lautet "Wie fahre ich einen Nagel mit einem Schraubenzieher?", Wird die Antwort "benutze einen Hammer" nicht ignoriert, da es sich nicht um einen Hammer handelte. –

Verwandte Themen