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
O uso do comando LDD, útil para o Slackware
Resolvendo o "Could not open /dev/vmmon" do VMWare no Linux
Inserindo Opções de Menu de Inicialização no Grub na Mão
Instalando o IPTVnator no Slackware
Instalando o p7zip-desktop no Deepin 20
Leitura recomendada
history - Procurar comandos antigos
Montar imagem ISO para abrir VLC
Gerando suas próprias notificações no Ubuntu
Dependências circulares com RPM
Pesquisando arquivos pelo seu conteúdo em modo texto
Comentários
Nenhum comentário foi encontrado.