2013-07-26 8 views
6

Mam plik, który wygląda mniej więcej tak:Jak usunąć linię, która pasuje do wzorca i linii za nim z sed?

good text 
good text 
FLAG bad text 
bad text 
good text 
good text 
good test 
bad Text FLAG bad text 
bad text 
good text 

muszę usunąć dowolny wiersz zawierający „flaga” i I zawsze potrzeba, aby usunąć jedną linię bezpośrednio następującą linię „flaga” też.

Linie "FLAG" są na tyle nieregularne, że nie mogę polegać na żadnej strategii numerów linii.

Ktoś wie, jak to zrobić z sed?

Odpowiedz

8

Korzystanie rozszerzenie wersji GNU z :

sed -e '/FLAG/,+1 d' infile 

To plonów:

good text 
good text 
good text 
good text 
good test 
good text 
+0

Idealny. Próbowałem czegoś takiego, ale nie potrafiłem poprawnie odgadnąć składni. Dzięki! –

9

To działa, i nie zależy od jakichkolwiek rozszerzeń:

sed '/FLAG/{N 
d 
}' infile 

N odczytuje następną linię w obszarze wzoru, następnie d usuwa przestrzeń wzorów.

+1

Bardzo zobowiązany. Chciałbym móc przyjąć dwie odpowiedzi tutaj. Dałem ci uprowadzenie. –

2

Oto jeden sposób z awk:

awk '/FLAG/{f=1;next}f{f=0;next}1' file 

lub

awk '/FLAG/{getline;next}1' file 
Powiązane problemy