Pular para o conteúdo

sed - Eliminando linhas em branco

Dica publicada em Shell Script / Expressões Regulares
Perfil removido removido
Hits: 24.080 Categoria: Shell Script Subcategoria: Expressões Regulares
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

sed - Eliminando linhas em branco

A dica é sobre eliminação de linhas em branco de arquivos com o comando sed.

Seja "arquivo.txt", um arquivo de texto com várias linhas, sendo algumas não aparentando ter caracteres.

A expressão regular para representar um carácter que se aparenta como branco é [\s\t].

Sendo:
  • \s :: representa um espaço em branco
  • \t :: representa uma tabulação

De modo que agora, é só encaixar no comando sed:

Exemplos de duas regex de avaliação:

sed -r '/^[\s\t]*$/d'
sed -r '/^[\s\t]+$/d'

Explicando:
  • ^ :: marca o reconhecimento do espaço avaliado para partir do começo da linha;
  • [\s\t] :: representa um carácter que pode ser um espaço em branco ou uma tabulação;
  • * :: representa o número de caracteres em branco e tabulação que podem ser pegos, sendo entre zero e inúmeros;
  • + :: representa o número de caracteres em branco e tabulação que podem ser pegos, sendo entre um e inúmeros;
  • :: marca o reconhecimento do espaço avaliado para ir até o final da linha;
  • / ... / :: dentro deste par de barras é onde fica escrita toda a regex;
  • d :: é o comando do sed que faz apagar a linha.

O primeiro comando sed faz apagar até as linhas vazias. O segundo faz apagar apenas as linhas que contenham algum dos caracteres "\s" e "\t".

A opção "-r" faz com que o sed reconheça um determinado conjunto de regex e evita que metacaracteres tenham que ser escritos com contra-barra "\".

O arquivo de exemplo pode ser enviado pelo comando cat ou aberto pelo próprio sed. Três exemplos:

$ cat arquivo.txt | sed -r 'comando' > arquivo2.txt
$ sed -r 'comando' arquivo.txt > arquivo2.txt
$ sed -r 'comando' -i arquivo.txt


O primeiro comando possui cat, que faz um pipe "|" que faz o conteúdo de "arquivo.txt" entrar pela entrada padrão ao comando sed, cuja saída iria para a tela se não fosse o redirecionador ">" que faz o conteúdo ir para o arquivo "arquivo2.txt".

O segundo comando faz o conteúdo de "arquivo.txt" ser lido diretamente por sed, cuja saída iria para a tela se não fosse o redirecionador ">" que faz o conteúdo ir para o arquivo "arquivo2.txt".

O terceiro comando faz o conteúdo de "arquivo.txt" ser lido diretamente por sed, cuja saída será uma modificação diretamente feita como edição em "arquivo.txt" graças à opção "-i", deixando este de ter os espaços anteriores.

A marcação que aparece como 'comando' nos três exemplos do comando sed, é nada menos que um dos dois exemplos de regex feitos anteriormente.

Se usar sed parece muito difícil, fica aqui como extra a dica de que é possível usar o comando grep:

grep -v '^[\s\t]*$' arquivo.txt

A opção "-v" do comando grep faz a rejeição de tudo o que se encaixe na expressão regular. Basta usar um redirecionador ">" ou ">>" para que a filtragem seja redirecionada para um arquivo-destino.

Bem, é isto.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Instalando Ubuntu 11.04 com suporte a Wifi Broadcom

Debian 11 Bullseye para Iniciantes

Instalando o Opera 9.02 no SuSE 10.1

Instalando Grub-Customizer no Debian 8

Como criar um cronômetro no Lazarus [Vídeo]

Eliminando linhas de comentário ou linhas em branco no Linux

Busca por string dentro dos arquivos

Como renomear arquivos de letras maiúsculas para minúsculas

Extraindo seu endereço IP com shell script (egrep + awk)

Screen (janelas) no modo shell?

#1 Comentário enviado por baixinho930 em 20/01/2017 - 10:11h
Ola tudo bem, tenho uma duvida pode me ajudar.

Tenho 2 arquivos lista1.txt e lista2.txt com algumas linhas ex:

lista1.txt

daniel_29anos_branco
julio_22anos_azul
tulio_38anos_amarelo

lista2.txt
julio_caixa4_144
tulio_caixa9_89
daniel_caixa71_76


Gostaria de saber se existe um comando para recortar as linhas da lista2.txt e adicionar na lista1.txt ficando assim:

lista1.txt

daniel_29anos_branco daniel_caixa71_76
julio_22anos_azul julio_caixa4_144
tulio_38anos_amarelo tulio_caixa9_89

adicionar pelo mesmo nome na mesma linha seria possivel ?

Grato.

Contribuir com comentário

Entre na sua conta para comentar.