2012-07-28 25 views
8

Potrzebuję pomocy przy użyciu sed, aby skomentować pasujące linie i 4 linie, które go śledzą. w pliku tekstowym.sed - skomentuj pasującą linię i x linie po niej

mój plik tekstowy jest tak:

[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 

chcę prefiks #, aby wszystkie linie posiadające tekst '[myprocess' i 4 linie, które wynika oczekiwany wynik:

#[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 

Bardzo dziękuję za pomoc w tej sprawie.

Odpowiedz

13

Można to zrobić poprzez zastosowanie wyrażenia regularnego do zestawu wierszy:

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

Dopasowuje linie z „myprocess” i 4 linie po nich. Dla tych 4 linii wstawia "#" na początku linii.

(myślę, że to może być rozszerzenie GNU - to nie jest w żadnym z "sed jeden liner" cheatsheets znam)

+0

'sed: -e wyrażenie # 1, char 12: nieoczekiwany ''' :-( – Mausy5043

+0

Jaka wersja zobaczyć ? Odds są stare albo nie mają rozszerzeń gnu – Flexo

+0

sed 4.2.2 Jest to domyślna wersja Debiana, tak, tak, prawdopodobnie brakujące rozszerzenia GNU – Mausy5043

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