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

Publicado por Mauricio Ferrari (LinuxProativo) em 11/02/2021

[ Hits: 1.567 ]

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

 


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

Instalando um VLC melhor no Deepin 20

uGet no Linux Mint 20 com suporte a Torrent

Correção do warning: setlocale: LC_ALL: cannot change locale (pt_BR.UTF-8) no ArchLinux, Manjaro, BigLinux, Junest (mini Arch Linux)

Resolvendo problemas de instabilidade no WIFI no Ubuntu e Linux Mint

Resetando as Configurações do KDE Plasma 5

Leitura recomendada

Localizando comandos no histórico

Abrindo o Eterm 'vidro fosco'

Copiando CDs e DVDs pelo terminal com facilidade

Otimizando o uso da memória RAM do sistema

Instalando o Compiz no Linux Slackware 12.2

  

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