2011-07-29 22 views
12

En sed, ¿es posible omitir las primeras n líneas al aplicar una expresión regular? Actualmente estoy usando el siguiente:¿Omitiendo las primeras n líneas cuando usas regex con sed?

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

en el siguiente archivo:

Name 
John 
Albert 
Mora 
Name 
Tommy 
Tammy 

En un pase, quiero utilizar algunas expresiones regulares (uno de los cuales consiste en eliminar la línea que contiene Name pero quiero para omitir la primera línea en este caso) para obtener la siguiente:

Name 
John 
Albert 
Mora 
Tommy 
Tammy 

Debido a que el archivo es enorme, no quiero hacer varias pasadas por lo que cualquier enfoques de un solo paso sería grande.

Respuesta

21

Sí, se puede aplicar comandos sed a los rangos de líneas con la sintaxis N,M. En este caso, usted quiere algo como esto:

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

Un ejemplo con delete:

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

¿Me puede mostrar cómo utilizar la sintaxis con delete en lugar de sustituir? Básicamente, cuando hago algo como esto: 'sed '2, $/^ Name/d'' el comando falla con el error: 'sed: -e expresión # 1, char 4: comando desconocido:' /' ' – Legend

+0

+ 1 Lo descubrí :) Gracias por indicarme la dirección correcta. – Legend

+0

'2, $' significa desde la línea 2 hasta el final del archivo. el artículo directamente después de $ es una operación. Para estos ejemplos, ya sea 's/search/replace' o' {/^string-to-delete/d} ' – Excalibur

Cuestiones relacionadas