SED - inserindo uma palavra abaixo de outra palavra específica

Publicado por Mauricio Ferrari em 11/02/2021

[ Hits: 1.435 ]

Blog: https://www.youtube.com/@LinuxDicasPro

 


SED - inserindo uma palavra abaixo de outra palavra específica



Precisando inserir uma palavra abaixo de uma outra palavra que está em vários documentos? Pode acontecer certo?

No meu caso, eu tenho vários SlackBuilds e esses não trabalhavam com tag. Então, mudei de ideia e resolvi colocar as tags no SlackBuilds. Mas, como já tenho uma quantidade considerável de SlackBuilds essa tarefa se torna muito demorada e cansativa se feita manualmente. Então, a solução foi recorrer ao sed, trabalhando com quebra de linha. E deu certo.

Primeiramente, pensei em colocar debaixo da string BUILD, ou seja, se o BUILD está na linha 30, coloco a string TAG na linha 31. Mas só tem um pequeno detalhe:

grep -n BUILD= *.SlackBuild
aria2.SlackBuild:30:BUILD=${BUILD:-1}
asciiquarium.SlackBuild:30:BUILD=${BUILD:-1}
cabextract.SlackBuild:29:BUILD=${BUILD:-1}
c-ares.SlackBuild:29:BUILD=${BUILD:-1}
cowsay.SlackBuild:30:BUILD=${BUILD:-1}
dpkg.SlackBuild:29:BUILD=${BUILD:-1}
facebook-desktop.SlackBuild:31:BUILD=${BUILD:-1}
flareget.SlackBuild:29:BUILD=${BUILD:-1}
flare.SlackBuild:31:BUILD=${BUILD:-1}
fortune-mod-br.SlackBuild:31:BUILD=${BUILD:-1}
fortune-mod.SlackBuild:30:BUILD=${BUILD:-1}
frostwire.SlackBuild:31:BUILD=${BUILD:-1}
google-chrome.SlackBuild:31:BUILD=${BUILD:-1}
google-earth.SlackBuild:31:BUILD=${BUILD:-1}
gst-plugins-bad.SlackBuild:29:BUILD=${BUILD:-1}
gst-plugins-ugly.SlackBuild:29:BUILD=${BUILD:-1}
hypnotix.SlackBuild:36:BUILD=${BUILD:-1}
jdk15.SlackBuild:31:BUILD=${BUILD:-1}
kazam.SlackBuild:31:BUILD=${BUILD:-1}
libass.SlackBuild:29:BUILD=${BUILD:-1}
libgme.SlackBuild:30:BUILD=${BUILD:-1}
libgnomekbd.SlackBuild:29:BUILD=${BUILD:-1}
libplacebo.SlackBuild:29:BUILD=${BUILD:-1}
libsidplayfp.SlackBuild:30:BUILD=${BUILD:-1}
lua.SlackBuild:29:BUILD=${BUILD:-1}
luna-wallpapers.SlackBuild:30:BUILD=${BUILD:-1}
mpv.SlackBuild:35:BUILD=${BUILD:-1}
mujs.SlackBuild:29:BUILD=${BUILD:-1}
notable.SlackBuild:31:BUILD=${BUILD:-1}
nulloy.SlackBuild:30:BUILD=${BUILD:-1}
perl-Curses.SlackBuild:29:BUILD=${BUILD:-1}
perl-Term-Animation.SlackBuild:30:BUILD=${BUILD:-1}
pluto-tv.SlackBuild:31:BUILD=${BUILD:-1}
portaudio.SlackBuild:30:BUILD=${BUILD:-1}
python3-imdbpy.SlackBuild:30:BUILD=${BUILD:-1}
python3-setproctitle.SlackBuild:30:BUILD=${BUILD:-1}
python-distutils-extra.SlackBuild:29:BUILD=${BUILD:-1}
qmplay2.SlackBuild:35:BUILD=${BUILD:-1}
recode.SlackBuild:29:BUILD=${BUILD:-1}
spotify.SlackBuild:29:BUILD=${BUILD:-1}
telegram.SlackBuild:31:BUILD=${BUILD:-1}
transmageddon.SlackBuild:30:BUILD=${BUILD:-1}
uget.SlackBuild:29:BUILD=${BUILD:-1}
whatsapp-desktop.SlackBuild:31:BUILD=${BUILD:-1}
xapp.SlackBuild:30:BUILD=${BUILD:-1}
xa.SlackBuild:30:BUILD=${BUILD:-1}

Não tem como tentar dessa forma. Então, o jeito é mapear a string BUILD e adicionar a quebra de linha com a string TAG logo abaixo. Pesquisando um pouco, cheguei nessa fórmula:

sed -i 's,BUILD=\${BUILD:-1},&\nTAG=\${TAG:-_slack15},g' *.SlackBuild

E veja, resolveu (resolvi encurtar a saída):

egrep -n "(BUILD=|TAG=)" *.SlackBuild
aria2.SlackBuild:30:BUILD=${BUILD:-1}
aria2.SlackBuild:31:TAG=${TAG:-_slack15}
asciiquarium.SlackBuild:30:BUILD=${BUILD:-1}
asciiquarium.SlackBuild:31:TAG=${TAG:-_slack15}
cabextract.SlackBuild:29:BUILD=${BUILD:-1}
cabextract.SlackBuild:30:TAG=${TAG:-_slack15}
c-ares.SlackBuild:29:BUILD=${BUILD:-1}
c-ares.SlackBuild:30:TAG=${TAG:-_slack15}
cowsay.SlackBuild:30:BUILD=${BUILD:-1}
cowsay.SlackBuild:31:TAG=${TAG:-_slack15}
dpkg.SlackBuild:29:BUILD=${BUILD:-1}
dpkg.SlackBuild:30:TAG=${TAG:-_slack15}

O truque está nessa parte "&\n" que é o que vai fazer a adição da quebra de linha. De quebra, percebe-se que eu fiz escape no "$", se tentar usar esse caractere sem a contra-barra, não não vai funcionar. Só funcionará dessa forma"\$". Também usei vírgula como delimitador, é opcional, você pode usar barra ou pipe sem problemas.

Espero que essa dica tenha sido útil.

Outras dicas deste autor

FreeOffice - Ocorreu o erro interno (-105). Tente novamente mais tarde [RESOLVIDO]

Copiar apenas os arquivos e não os diretórios

Instalando o Java 14 no Ubuntu, Linux Mint e Debian

Comando "less" Colorido no Shell

Instalando Última Versão do LibreOffice no Deepin 20

Leitura recomendada

Fazendo "chroot" facilmente

Montar partição na memória RAM

Curiosidade sobre o comando "cal" e setembro de 1752

Erro: pasta /tmp sem espaço no Arch Linux e derivados [Resolvido]

Recuperar arquivos do Windows usando um LiveCD do Ubuntu Linux

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts