Eu tentei grep -v '^$'
no Linux e isso não funcionou. Este arquivo veio de um sistema de arquivos do Windows.
164
Tente o seguinte:
grep -v -e '^$' foo.txt
A -e
opção permite padrões de expressão regular para correspondência.
As aspas simples ^$
fazem com que funcione para Cshell. Outras conchas ficarão felizes com aspas simples ou duplas.
UPDATE: Isso funciona para mim para um arquivo com linhas em branco ou "todos os espaços em branco" (como linhas de janelas com finais de linha de estilo "\ r \ n"), enquanto o acima remove apenas arquivos com linhas em branco e finais de linha de estilo unix:
grep -v -e '^[[:space:]]*$' foo.txt
grep -E -v
, tudo depois-e
é interpretado como o padrão.grep -v -e '^[[:space:]]*$' -e '^#' file
fornecerá a você todas as linhas não em branco e sem comentários em um script ou arquivo de configuração (ou qualquer tipo de arquivo que use o caractere hash para comentários).-e
opção permite padrões regex para correspondência." Isso é muito enganador .-e
é uma definição (POSIX-) para:This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-).
(do manual ). O Grep já espera uma expressão regular (básica) por padrão. Por este padrão, você pode deixar de fora-e
inteiramente:grep -v '^[[:space:]]*$' foo.txt
.Mantenha simples.
fonte
Usar:
Ou simplesmente awk:
Se você não possui o dos2unix, poderá usar ferramentas como tr :
fonte
awk
.Executando o código
Para entender mais sobre como / por que isso funciona, recomendo ler expressões regulares. http://www.regular-expressions.info/tutorial.html
fonte
Prefiro usar
egrep
, embora no meu teste com um arquivo genuíno com linha em branco sua abordagem tenha funcionado bem (embora sem aspas no meu teste). Isso funcionou também:fonte
Se você tiver seqüências de várias linhas em branco em uma linha e desejar apenas uma linha em branco por sequência, tente
cat -s
suprime repetidas linhas de saída vazias.Sua saída iria de
para
As três linhas em branco na saída original seriam compactadas ou "comprimidas" em uma linha em branco.
fonte
fonte
O mesmo que as respostas anteriores:
Aqui,
grep -e
significa a versão estendida do grep . '^ $' significa que não há nenhum caractere entre ^ (Início da linha) e $ (final da linha). '^' e '$' são caracteres de expressão regular.Então o comando
grep -v
imprimirá todas as linhas que não correspondem a esse padrão (sem caracteres entre ^ e $).Dessa forma, as linhas em branco vazias são eliminadas.
fonte
-e
não significa "a versão estendida do grep", talvez você esteja confuso-E
? O manual diz claramente que-e
apenas diz explicitamente que um padrão segue. Como o padrão não inicia com um traço, e você está definindo apenas um padrão de qualquer maneira, é possível deixá-lo de fora, pois por padrão o grep espera um padrão de regex:grep -v '^$' foo.txt
(não há necessidade de funcionalidade de regex estendida). Também vale ressaltar que isso não elimina as linhas em branco no arquivo, apenas as que são canalizadas pela saída. Para esse caso,sed -i
seria a ferramenta certa.Eu tentei muito, mas isso parece funcionar (supondo que
\r
você esteja te mordendo aqui):fonte
Usando Perl:
\S
significa combinar caracteres não em branco.fonte
egrep -v "^ \ s \ s +"
O egrep já faz regex e o \ s é um espaço em branco.
O + duplica o padrão atual.
O ^ é para o começo
fonte
Usar:
fonte
uniq
reduzirá as linhas em branco adjacentes a apenas uma linha em branco, mas não as removerá completamente. Ainda assim, eu gosto de tentar usaruniq
assim. A classificação primeiro removeria efetivamente todas as linhas em branco - deixando apenas uma, mas reorganizar a ordem das linhas pode não ser aceitável.Aqui está outra maneira de remover as linhas brancas e as linhas que começam com o
#
sinal. Eu acho que isso é bastante útil para ler arquivos de configuração.fonte
É verdade que o uso de grep -v -e '^ $' pode funcionar, no entanto, não remove linhas em branco que possuem 1 ou mais espaços . Eu achei a resposta mais fácil e simples para remover linhas em branco é o uso do awk . O seguinte é um pouco modificado dos caras do awk acima:
Mas como essa pergunta é para usar o grep, vou responder o seguinte:
Nota : o espaço em branco entre ^ e *.
Ou você pode usar \ s para representar o espaço em branco como este:
fonte