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.