Manipulando quebra de linha (POSIX)

De Wiki Hackstore

Usando SED

No Sed da GNU, a partir da versão 3.02.80(*), foi adicionado o \n como escape válido dos dois lados do comando s///. Com isso a tarefa de colocar cada palavra numa linha isolada, ou seja, trocar espaços em branco por quebras de linha, fica trivial:

sed 's/ /\n/g' texto.txt

Mas com outras versões do Sed que não entendem este escape, a quebra de linha deve ser inserida literalmente e deve ser escapada:

sed 's/ /\
/g' texto.txt

Como curiosidade, a operação inversa, de colocar todas as linhas de um arquivo numa linha só, já é mais trabalhosa e utiliza o conceito de laço:

sed ':a;$!N;s/\n/ /g;ta' texto.txt


Usando AWK

Substitui quebra de linha de um arquivo pelos caracteres {LF}

awk '{printf("%s", $0 (NR==1 ? "{LF}" : "{LF}"))}' $1

exemplo:

quse -D java curl usb threads libedit socks5 gif mozilla firefox3 consolekit idn python python3 scanner policykit wxwidgets rar nsplugin usb pdf iphone screenshot thunar libnotify \ 
x264 fam xvid cairo a52 xv mad mp3 dvd flac mpeg ogg tiff aac ffmpeg vorbis truetype sdl pngsdsd|cut -d: -f2|uniq |awk '{printf("%s", $0 (NR==1 ? "{LF}" : "{LF}"))}' $1


Usando VI

Quebra a linha de com base em um determinado separador:

:g/separador/s//^v^m/g


Usando TR

Remoção de quebra de linha do windows (^M)

Há situações onde arquivos de texto gerados em um sistema operacional Windows podem apresentar a quebra de linha como "^M". Pode ocorrer mal funcionamento em alguns scripts caso você necessite utilizar este arquivo de texto para alimentar alguma função (while, for, etc), e para remover o caractere "^M" e corrigir é simples:

cat arquivo.txt | tr -d '\b\r' > arquivo-corrigido.txt



Referências:

http://aurelio.net/sed/sed-HOWTO/sed-HOWTO-7.html
http://www.zago.eti.br/script/sed.html