Pular para o conteúdo

Comando "sed" com parâmetro que aceita barra " / "

Dica publicada em Shell Script / Introdução
Mauricio Ferrari (LinuxProativo) maurixnovatrento
Hits: 4.528 Categoria: Shell Script Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar

Comando "sed" com parâmetro que aceita barra " / "

Essa dica é uma sugestão que eu encontrei e testei para solucionar o problema de inserir linhas em um documento usando o comando sed. Vou dar um exemplo de um comando que iria falhar:

sed -i -e "s/ usr/home/BAK / usr/home/backup /g" teste

Não tem como funcionar. Por isso, optei por outra solução. Vamos começar.

Crie um arquivo com o nome de test e depois, em um terminal, teste esse comando:

sed -i '4i session.save_path = /home/userftp/tmp' test

Ao conferir, nada aconteceu, pois para o comando funcionar as linhas devem existir. Aqui o 4i diz para o sed adicionar o texto na linha 4, mas como não tem linha nenhuma, ele não faz nada.

Então, vamos fazer assim:

echo -e " um \n dois \n tres \n quatro \n cinco" >> test
$ cat test

um
dois
tres
quatro
cinco


Agora vamos testar:

sed -i '4i session.save_path = /home/userftp/tmp' test
$ cat test

um
dois
tres
session.save_path = /home/userftp/tmp
quatro
cinco


Como pode ser visto, o texto foi inserido na linha 4 empurrando todo o resto do conteúdo para baixo. Assim, você tem a possibilidade de inserir barras nos textos usando o sed.

Fica a dica.

Instalando o IPTVnator no Slackware

Instalando o Shutter no Linux Mint 20 e Ubuntu 20.04

Tenha um aquário no seu terminal no Debian, Ubuntu, Linux Mint e derivados

Preparando o Linux Mint 20 para instalar o Plugin coc.nvim no VIM

Flacon no Debian e Linux Mint 20

Pacman colorido no Arch Linux

SED - salvar resultados em novo arquivo

Criando item no menu do GNU/Linux com terminal executando comandos/scripts/aplicações

Shell script no logon do openSUSE 11.3 para definir profile com configurações do wine e atalhos

Ocultando a versão do seu BIND

#1 Comentário enviado por maurixnovatrento em 06/05/2020 - 13:45h

Se alguém também tiver alternativas pode complementar aqui.

___________________________________
Conhecimento não se Leva para o Túmulo.
#2 Comentário enviado por msoliver em 06/05/2020 - 17:14h
Boa tarde Mauricio123.
No caso de "/" no "padrão",
As opções que utilizo, são:
Escapar as "/":
Ex.:

sed 's/\/media\/adminq\/persistence\/BACKUP\/BKP_SERVER\/CONF/ALTERADO\/AGORA\//' texto.txt
/media/adminq/persistence/BACKUP
/media/adminq/persistence/BACKUP/APPS
/media/adminq/persistence/BACKUP/BKP_SERVER
ALTERADO/AGORA/
/media/adminq/persistence/BACKUP/BKP_SERVER/mysql
/media/adminq/persistence/BACKUP/BKP_SERVER/www

Ou, utilizar um "delimitador" diferente de "/":

sed 's|/media/adminq/persistence/BACKUP/BKP_SERVER/CONF|ALTERADO/AGORA/|' texto.txt
/media/adminq/persistence/BACKUP
/media/adminq/persistence/BACKUP/APPS
/media/adminq/persistence/BACKUP/BKP_SERVER
ALTERADO/AGORA/
/media/adminq/persistence/BACKUP/BKP_SERVER/mysql
/media/adminq/persistence/BACKUP/BKP_SERVER/www


cat texto.txt
/media/adminq/persistence/BACKUP
/media/adminq/persistence/BACKUP/APPS
/media/adminq/persistence/BACKUP/BKP_SERVER
/media/adminq/persistence/BACKUP/BKP_SERVER/CONF
/media/adminq/persistence/BACKUP/BKP_SERVER/mysql
/media/adminq/persistence/BACKUP/BKP_SERVER/www

_________________
Att.: Marcelo Oliver
_________________
#3 Comentário enviado por msoliver em 06/05/2020 - 17:17h

[2] Comentário enviado por msoliver em 06/05/2020 - 17:14h

Boa tarde Mauricio123.
No caso de "/" no "padrão",
As opções que utilizo, são:
Escapar as "/":
Ex.:

sed 's/\/media\/adminq\/persistence\/BACKUP\/BKP_SERVER\/CONF/ALTERADO\/AGORA\//' texto.txt
/media/adminq/persistence/BACKUP
/media/adminq/persistence/BACKUP/APPS
/media/adminq/persistence/BACKUP/BKP_SERVER
ALTERADO/AGORA/
/media/adminq/persistence/BACKUP/BKP_SERVER/mysql
/media/adminq/persistence/BACKUP/BKP_SERVER/www

Ou, utilizar um "delimitador" diferente de "/":

sed 's|/media/adminq/persistence/BACKUP/BKP_SERVER/CONF|ALTERADO/AGORA/|' texto.txt
/media/adminq/persistence/BACKUP
/media/adminq/persistence/BACKUP/APPS
/media/adminq/persistence/BACKUP/BKP_SERVER
ALTERADO/AGORA/
/media/adminq/persistence/BACKUP/BKP_SERVER/mysql
/media/adminq/persistence/BACKUP/BKP_SERVER/www


cat texto.txt
/media/adminq/persistence/BACKUP
/media/adminq/persistence/BACKUP/APPS
/media/adminq/persistence/BACKUP/BKP_SERVER
/media/adminq/persistence/BACKUP/BKP_SERVER/CONF
/media/adminq/persistence/BACKUP/BKP_SERVER/mysql
/media/adminq/persistence/BACKUP/BKP_SERVER/www

_________________
Att.: Marcelo Oliver
_________________


#4 Comentário enviado por maurixnovatrento em 13/05/2020 - 22:06h

Bom complemento. Esse sed merece um artigo só para ele. Se bem que já deve ter bastante coisa sobre ele aqui no VoL.

___________________________________
Conhecimento não se Leva para o Túmulo.

Contribuir com comentário

Entre na sua conta para comentar.