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

Publicado por Mauricio Ferrari em 11/02/2021

[ Hits: 1.062 ]

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

Instalando o BootUp Manager (BUM) no Ubuntu 20.04 e Linux Mint 20

Ctrl+C e Ctrl+V no Terminal Linux

Três Formas Fáceis de usar Super Usuário pelo Terminal no Linux

Integrando AppImage no Slackware

Wi-Fi pedindo senha sempre que o Deepin 20 inicia [Resolvido]

Leitura recomendada

Programas úteis para modo texto

Auto-completar (TAB) no Ubuntu

Comprometendo a integridade de um arquivo

Xlsclients: Listando aplicações que estão utilizando recursos do X

Montar imagem ISO para abrir VLC

  

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