2012-07-28 18 views
8

Ich brauche Hilfe bei der Verwendung von sed, um eine übereinstimmende Zeilen und 4 Zeilen, die es folgt kommentieren. in einer Textdatei.sed - Kommentar eine übereinstimmende Zeile und x Zeilen nach ihm

meine Textdatei ist wie folgt:

[myprocess-a] 
property1=1 
property2=2 
property3=3 
property4=4 

[anotherprocess-b] 
property1=gffgg 
property3=gjdl 
property2=red 
property4=djfjf 

[myprocess-b] 
property1=1 
property4=4 
property2=2 
property3=3 

I #, um alle Zeilen mit Text '[MyProcess' und 4 Zeilen voran wollen, dass es erwartete Ausgabe folgt:

#[myprocess-a] 
#property1=1 
#property2=2 
#property3=3 
#property4=4 

[anotherprocess-b] 
property1=gffgg 
property3=gjdl 
property2=red 
property4=djfjf 

#[myprocess-b] 
#property1=1 
#property4=4 
#property2=2 
#property3=3 

Vielen Dank für Ihre Hilfe zu diesem Thema.

Antwort

13

Sie können dies tun, indem Sie einen regulären Ausdruck auf eine Reihe von Linien Anwendung:

sed -e '/myprocess/,+4 s/^/#/' 

Das passt Linien mit ‚MyProcess‘ und die vier Linien nach ihnen. Für diese 4 Zeilen fügt es dann ein '#' am Anfang der Zeile ein.

(Ich denke, das eine GNU-Erweiterung sein könnte - es ist nicht in einem der "sed Motto" cheatsheets ich weiß)

+0

'sed: -e Ausdruck # 1, char 12: unerwartet ''' :-( – Mausy5043

+0

Welche Version von sehen "Quoten sind entweder alt oder nicht die GNU-Erweiterungen. – Flexo

+0

sed 4.2.2. Es ist die Debian-Standard so, ja, wahrscheinlich fehlt GNU-Erweiterungen." – Mausy5043

2
sed '/\[myprocess/ { N;N;N;N; s/^/#/gm }' input_file