vacias una ultimas lineas linea eliminar delete contar con borrar blanco linux unix sed

linux - una - sed delete line



Eliminar líneas vacías usando sed (12)

Estoy tratando de borrar líneas vacías usando sed:

sed ''/^$/d''

Pero no tengo suerte con ello.

Por ejemplo, tengo estas líneas:

xxxxxx yyyyyy zzzzzz

y quiero que sea como

xxxxxx yyyyyy zzzzzz

¿Cuál debería ser el código para esto?



Con la ayuda de la respuesta aceptada aquí y la respuesta aceptada anterior, he usado:

$ sed ''s/^ *//; s/ *$//; /^$/d; /^/s*$/d'' file.txt > output.txt `s/^ *//` => left trim `s/ *$//` => right trim `/^$/d` => remove empty line `/^/s*$/d` => delete lines which may contain white space

Esto cubre todas las bases y funciona perfectamente para mis necesidades. Felicitaciones a los carteles originales @Kent y @kev


Creo que este es el más fácil y rápido:

cat file.txt | grep .

Si también necesitas ignorar todas las líneas de espacios en blanco, prueba esto:

cat file.txt | grep ''/S''

Ejemplo:

s="/ / a/ b/ / Below is TAB:/ / Below is space:/ / c/ / "; echo "$s" | grep . | wc -l; echo "$s" | grep ''/S'' | wc -l

salidas

7 5


Es muy probable que vea un comportamiento inesperado porque su archivo de texto se creó en Windows, por lo que la secuencia de final de línea es /r/n . Puede usar dos2unix para convertirlo en un archivo de texto de estilo UNIX antes de ejecutar sed o usar

sed -r "/^/r?$/d"

para eliminar líneas en blanco ya sea que el retorno de carro esté o no allí.


Esto funciona en awk también.

awk ''!/^$/'' file xxxxxx yyyyyy zzzzzz


Me falta la solución awk :

awk ''NF'' file

Lo que volvería:

xxxxxx yyyyyy zzzzzz

¿Como funciona esto? Como NF significa "número de campos", las líneas que están vacías tienen 0 fiedls, por lo que awk evalúa 0 en Falso y no se imprime ninguna línea; sin embargo, si hay al menos un campo, la evaluación es Verdadera y hace que awk realice su acción predeterminada: imprimir la línea actual.


Mi respuesta específica a bash es recomendar el uso del operador de sustitución perl con el indicador global de patrón g para esto, de la siguiente manera:

$ perl -pe s''/^/n|^[/ ]*/n//g'' $file xxxxxx yyyyyy zzzzzz

Esta respuesta ilustra la contabilidad de si las líneas vacías tienen o no espacios en ellas ( [/ ]* ), así como el uso de | para separar varios términos / campos de búsqueda. Probado en macOS High Sierra y CentOS 6/7.

Para su información, el sed ''/^$/d'' $file original del código de sed ''/^$/d'' $file funciona bien en bash Terminal en macOS High Sierra y CentOS 6/7 Linux en un clúster de supercomputación de alto rendimiento.


Para mí, con FreeBSD 10.1 con sed trabajé solo esta solución:

sed -e ''/^[ ]*$/d'' "testfile"

Dentro de [] hay símbolos de espacio y tabulación.

archivo de prueba contiene:

fffffff next 1 tabline ffffffffffff ffffffff next 1 Space line ffffffffffff ffffffff empty 1 lines ffffffffffff ============ EOF =============


Puede tener espacio / tabulaciones en su línea "vacía". Si es así, esto ayudará:

sed ''/^/s*$/d''

Esto utiliza /s para que coincida con cualquier carácter de espacio en blanco.


Puedes decir:

sed -n ''/ / p'' filename #there is a space between ''//''


Puedes hacer algo así usando "grep", también:

egrep -v "^$" file.txt