Usando sed, como formatar uma palavra por linha, removendo o espaço em branco

4

Estou tentando substituir padrões e limpar um arquivo contendo várias palavras para obter uma palavra por linha.

O resultado é obtido usando esta linha de comando:

sed -e '/^[[:space:]]*$/ d' \             # remove empty line
    -e 's/^[[:space:]]*//' \              # remove white space at the beginning
    -e 's/[[:space:]]*$//' \              # remove white space at the ending (EOL)
    -e 's/[[:space:]][[:space:]]*/\n/g' \ # convert blanks between words to newline
    -e '$a\'                              # add a newline if missing at EOF
    -e .....                              # replace other patterns.

(a última expressão foi encontrada em Como adicionar uma nova linha ao final de um arquivo? )

A idéia é processar o arquivo (por exemplo, substitui algum padrão) e formatar o arquivo ao mesmo tempo com apenas um pequeno programa sed.

Tenho certeza de que é possível usar outros recursos sed para reduzir a expressão.

Atenciosamente

    
por Yann Droneaud 14.06.2013 / 17:02

3 respostas

6

Você pode usar tr :

tr -s "[[:blank:]]" "\n" < file | grep .

A classe de caractere [:blank:] inclui todo o espaço em branco horizontal. O -s comprime ou reduz ocorrências de múltiplos caracteres para um.

O grep remove uma linha em branco (se presente).

    
por 14.06.2013 / 17:26
4

Tente isso

sed -e 's/[[:space:]]/\n/g' | grep -v '^$'

Ele usa grep e sed , mas espero que esteja tudo bem (se você tem sed em um sistema, normalmente você tem grep )

    
por 14.06.2013 / 17:06
4

Não sed, mas:

gawk length RS='[[:space:]]+' file

Isso trata qualquer seqüência de espaços em branco como o separador de registro e imprime cada registro não vazio.

    
por 14.06.2013 / 19:06