Retirando espaços em branco em arquivos com sed/vi

O comando sed (stream editor), ou seja, editor de fluxo, atualmente é bastante utilizado por todas as distribuições Linux/GNU. Muito útil para transformar textos, utilizando um arquivo ou uma entrada como o pipe.

Exemplos:

Retira espaços em brancos.

# sed -e 's/ //g'

Retira todos os espaços em branco do arquivo /etc/passwd que contenha como shell padrão o bash.

[root@celta /]# cat /etc/passwd | grep bash | sed -e 's/ //g'
root:x:0:0:root:/root:/bin/bash
tadeu:x:1000:1000::/home/tadeu:/bin/bash

A opção -e mostra na tela, para trocar no arquivo utilizamos a opção -i.

Trocando tabulação:

[root@celta etc]# cat hosts.bkp | sed -e 's/\t/ /g' 
192.168.56.2 celta.cissaspike.net
192.168.56.3 debianjessie.com.br
192.168.0.103 notebook 

Nesse exemplo troquei por um espaço simples mas podemos trocar por outros caracteres também.

Trocando uma palavra:

[root@celta etc]# sed -e 's/root/bernacchi/g' < /etc/passwd | grep bash 
bernacchi:x:0:0:bernacchi:/bernacchi:/bin/bash

Colocando uma palavra no início da linha:

[root@celta etc]# sed -e 's/^/LINHA => /g' < /etc/passwd 
LINHA => root:x:0:0:root:/root:/bin/bash
LINHA => bin:x:1:1:bin:/bin:/sbin/nologin
LINHA => daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
...
...

Coloca uma palavra no final do arquivo:

[root@celta etc]# sed -e 's/$/ <= FINAL/g' < /etc/passwd 
root:x:0:0:root:/root:/bin/bash <= FINAL
bin:x:1:1:bin:/bin:/sbin/nologin <= FINAL
daemon:x:2:2:daemon:/sbin:/sbin/nologin <= FINAL
...
...
...

Deleta todas as linhas que contenham a string 'root':

[root@celta etc]# sed -e '/root/d' passwd.bkp  | grep root 

Deleta todas as linhas que começam com a string 'root':

[root@celta etc]# sed -e '/root/d' < passwd.bkp  

Retira todas as linhas em branco do arquivo:

[root@celta etc]# sed -e '/^$/d' /etc/hosts.bkp  
192.168.56.2	celta.cissaspike.net
192.168.56.3	debianjessie.com.br
192.168.0.103	notebook 

Retirar todos os espaços em branco:

[root@celta etc]# sed 's/[[:blank:]]//g' input.txt 
[root@celta etc]# sed 's/[[:space:]]//g' input.txt

Insere da linha 2 a 5 o caracter '#':

[[root@celta etc]# sed -e '2,5s/^/#/' < /etc/passwd 
root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

Insere da linha 2 a 5 a palavra INICIO:

[root@celta etc]# sed -e '2,5s/^/INICIO /' < /etc/passwd 
root:x:0:0:root:/root:/bin/bash
INICIO bin:x:1:1:bin:/bin:/sbin/nologin
INICIO daemon:x:2:2:daemon:/sbin:/sbin/nologin
INICIO adm:x:3:4:adm:/var/adm:/sbin/nologin
INICIO lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

Insere no final da linha 5 a palavra TEXTO:

[root@celta etc]# sed -e '5s/$/ TEXTO/' < /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin TEXTO
Vim

Insere conteúdo do arquivo.txt na posição 5 de outro arquivo:

[root@celta etc]# cat arquivo.txt 
tadeu bernacchi blablabla etc etc etc

O cursor tem que estar na posição desejada (5).

: r arquivo.txt 

Deletar um bloco de texto:

->ESC,

->: set number

->1,50d

Vai deletar da linha 1 a 50.

Referência:
https://www.tecmint.com/linux-sed-command-tips-tricks/