2012-05-05 32 views
49

Estoy tratando de eliminar las dos primeras líneas y las últimas cuatro líneas de mis archivos de texto. ¿Cómo puedo hacer esto con Bash?¿Cómo eliminar las dos primeras líneas y las últimas cuatro líneas de un archivo de texto con bash?

+0

Los factores que pueden ayudar con la supresión de líneas al final del archivo: [http://stackoverflow.com/questions/4881930/bash -remove-the-last-line-from-a-file] (http://stackoverflow.com/questions/4881930/bash-remove-thelast-line-from-a-file) – Linger

Respuesta

72

Puede combinar tail y head:

$ tail -n +3 file.txt | head -n -4 > file.txt.new && mv file.txt.new file.txt 
+10

+1 por no usar 'gato'. –

+0

Muchas gracias. – rebca

+1

Tenga en cuenta que desde Git Bash en Windows, 'tail -n + 3' funciona pero' head -n -4' dice 'número inválido de líneas'. Parece un error (quizás se usa una versión anterior de 'head'). –

16

de cabeza y cola

cat input.txt | tail -n +3 | head -n -4 

Sed Solución

cat input.txt | sed '1,2d' | sed -n -e :a -e '1,4!{P;N;D;};N;ba' 
+4

No es necesario que use 'cat':' tail -n +3 input.txt | ... 'funciona a la perfección (y lo mismo para' sed'). – huon

+0

... Gracias ... :) – Debaditya

+3

Gracias por la solución sed; Lo necesitaba en una máquina que no permite números de línea negativos para la cabeza. (Por cierto, se debe negar el 4 en el primer comando). – eswald

2

Usted puede llamar el editor ex de la línea de comando bash utilizando la siguiente muestra. Tenga en cuenta que utiliza un here document para finalizar la lista de comandos a ej.

ex text.file << EOF 
1,2d 
$ 
-3,.d 
x 
EOF 
7

Ésta es la forma más rápida que encontré:

sed -i 1,2d filename 
+0

el -i es incorrecto –

+0

'-i extensión Edite los archivos in situ, guardando las copias de seguridad con la extensión especificada. Si se proporciona una extensión de longitud cero, no se guardará ninguna copia de seguridad. No se recomienda dar una extensión de longitud cero- cuando los archivos de edición in situ, ya que corre el riesgo de corrupción o contenido parcial en situaciones donde el espacio en disco se agota, etc. " – finferflu

+0

Eso es lo que dice la documentación, al menos la implementación de sed en mi sistema ... – finferflu

Cuestiones relacionadas