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 greppara 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, nou 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 awksolução:
$ awk NF file
Com awk, NFdefinido apenas em linhas que não estejam em branco. Quando essa condição corresponder, a awkação padrão printimprimirá 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 sedcomando 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 :bufdocomando 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?