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

Publicado por Mauricio Ferrari em 11/02/2021

[ Hits: 555 ]

Blog: https://github.com/mxnt10

 


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 corretamente o Wine atualizado no Debian, Ubuntu, Linux Mint e derivados

Restaurando o .bashrc e o .profile para o padrão no Ubuntu e derivados

Comando CUT usando delimitador TAB

Instalando o BootUp Manager no Deepin 20

Executando Arquivo de Mídia .opus pelo Terminal

Leitura recomendada

80 Comandos para o pinguim (parte 2)

Atalhos Touchpad no KDE (Slackware)

Comando find: expressões regulares e exclusão de diretórios

Mostrando seu prompt para outro usuário

Backup de dados no Linux

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts