Quero remover todas as linhas vazias de um arquivo. Mesmo que a linha contenha espaços ou tabulações, ela também deve ser removida.
Quero remover todas as linhas vazias de um arquivo. Mesmo que a linha contenha espaços ou tabulações, ela também deve ser removida.
Respostas:
Apenas grep
para não-espaços em branco:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
, dentro dos intervalos de caracteres ( [...]
), é chamado de classe de caracteres POSIX. Existem alguns exemplos [:alpha:]
, [:digit:]
... [:blank:]
corresponde ao espaço em branco horizontal (na localidade POSIX, espaço e tabulação, mas em outras localidades, pode haver mais, como todos os caracteres de espaçamento horizontal Unicode nos locais UTF8), enquanto [[:space:]]
corresponde à horizontal e vertical branco caracteres de espaço (o mesmo que [:blank:]
mais itens como guia vertical, feed de formulário ...).
grep '[:blank:]'
Retornaria as linhas que contêm qualquer um dos personagens, :
, b
, l
, a
, n
ou k
. As classes de caracteres são reconhecidas apenas dentro [...]
e ^
dentro [...]
negam o conjunto. Então, [^[:blank:]]
significa qualquer personagem, exceto os em branco.
[^[:blank:]]$
corresponderia apenas às linhas que terminam em um espaço em branco. Queremos linhas que contêm um não-branco em qualquer lugar
grep -E '\S'
que não funcionariam?
Aqui está uma awk
solução:
$ awk NF file
Com awk
, NF
definido apenas em linhas que não estejam em branco. Quando essa condição corresponder, a awk
ação padrão print
imprimirá a linha inteira.
E se:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
ou
sed -e '/^[[:blank:]]*$/d' source_file > newfile
ie
Para cada linha, substitua:
^
")[[:blank:]]
") zero ou mais vezes (" *
")$
")Mais informações sobre :: blank :: e outros caracteres especiais em http://www.zytrax.com/tech/web/regex.htm#special
[[:space:]]
inclui guias. Caso contrário, sua regex falharia se um espaço seguisse uma guia.
wctype(3)
e isalpha(3)
man descrevem o que as classes de caracteres corresponderão.
Você pode usar o sed
comando para remover linhas em branco:
sed '/^$/d' in > out
Este comando exclui todas as linhas vazias do arquivo "in"
Parece que eu encontrei um não tão rápido, mas engraçado, afinal:
| xargs -L1
Tente ex -way:
ex -s +'v/\S/d' -cwq test.txt
Para vários arquivos (editar no local):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Nota: O :bufdo
comando 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
Use o seguinte comando:
grep '\S' FILE
que remove todas as linhas, incluindo espaços ou tabulações.
Caso contrário, a remoção não incluindo linhas com espaços / tabulações, use:
grep . FILE
Por exemplo:
$ printf "line1\n\nline2\n \nline3\n" > FILE
$ cat -v FILE
line1
line2
line3
$ grep '\S' FILE
line1
line2
line3
$ grep . FILE
line1
line2
line3
Veja também:
sed
: Excluir linhas vazias usando sedawk
: Remover linhas em branco usando awk
$
para o fim da linha?