Como remover linhas vazias / em branco em um arquivo no Unix?

37

Como faço para remover linhas vazias / em branco (incluindo espaços apenas) em um arquivo no Unix / Linux usando a linha de comando?

conteúdo do arquivo.txt

Line:Text
1:<blank>
2:AAA
3:<blank>
4:BBB
5:<blank>
6:<space><space><space>CCC
7:<space><space>
8:DDD

saída desejada

1:AAA
2:BBB
3:<space><space><space>CCC
4:DDD
    
por Michael Ellick Ang 28.03.2011 / 22:14

7 respostas

66

Esta linha sed deve fazer o truque:

sed -i '/^$/d' file.txt

O -i significa que irá editar o arquivo no local.

    
por 28.03.2011 / 22:19
22
sed '/^$/d' file.txt

d é o comando sed para excluir uma linha. ^$ é uma expressão regular que corresponde apenas a uma linha em branco, um início de linha seguido por um final de linha.

    
por 28.03.2011 / 22:18
14

Você pode usar a opção -v com o grep para remover as linhas vazias correspondentes.

Como isso

grep -Ev "^$" file.txt
    
por 28.03.2011 / 22:20
14

grep

Solução simples usando o comando grep :

grep . file
    
por 05.05.2015 / 16:12
6

Para remover linhas vazias, você pode inserir novas repetições de linha com tr :

cat file.txt | tr -s '\n' '\n'
    
por 26.07.2017 / 10:35
2

Aqui está uma solução awk :

awk NF file

Com Awk, NF é definido apenas em linhas não-brancas. Quando essa condição corresponde, a ação padrão do Awk é imprimir a linha inteira.

    
por 08.06.2018 / 16:48
0

Ex / Vim

Aqui está o método usando o ex editor (parte do Vim):

ex -s +'v/\S/d' -cwq test.txt

Para vários arquivos (editar no local):

ex -s +'bufdo!v/\S/d' -cxa *.txt

Observação: o comando :bufdo não é POSIX .

Sem modificar o arquivo (basta imprimir na saída padrão):

cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
    
por 12.04.2018 / 21:24