2011-07-29 13 views
12

Czy w sed można pominąć pierwsze n linii podczas stosowania wyrażenia regularnego? Obecnie używam następujących:Pomijanie pierwszych n linii przy użyciu wyrażenia regularnego z sed?

cat test | sed '/^Name/d;/^----------/1;/^(/d;/^$/d' 

na następujący plik:

Name 
John 
Albert 
Mora 
Name 
Tommy 
Tammy 

w jednym przejściu, chcę korzystać z niektórych regexes których (jeden jest, aby usunąć wiersz zawierający Name ale chcę pominąć pierwszy wiersz w tym przypadku), aby uzyskać następujące informacje:

Name 
John 
Albert 
Mora 
Tommy 
Tammy 

Ponieważ plik jest ogromny, nie chcę, aby tak wiele przechodzi wszelkie sposoby w jednym przebiegu byłoby świetnie.

Odpowiedz

21

Tak, można zastosować polecenia sed do zakresów linii ze składnią N,M. W tym przypadku, gdy chcesz coś takiego:

sed -e '2,$s/foo/bar/' 

przykład w przypadku usunięcia:

sed -e '2,${ /^Name/d }' 
+0

mógłbyś mi pokazać jak używać składni z kasowania w przeciwieństwie do zastąpienia? Zasadniczo, gdy robię coś takiego: 'sed '2, $/^ Name/d'' polecenie kończy się niepowodzeniem z błędem: 'sed: -e expression # 1, char 4: unknown command:' /' ' – Legend

+0

+ 1 Właśnie to wymyśliłem :) Dziękuję, że wskazałeś mi właściwy kierunek. – Legend

+0

'2, $' oznacza od linii 2 do końca pliku. element bezpośrednio po $ jest operacją. W przypadku tych przykładów albo 's/search/replace' lub' {/^string-to-delete/d} ' – Excalibur

Powiązane problemy