Substitua todos os subdomínios em um arquivo pelo outro nome de domínio usando sed e curinga

1

Substitua todos os nomes de subdomínios em um arquivo por um nome de domínio diferente usando um caractere curinga.

Ex: em um arquivo, tenho os seguintes domínios:

example1.domain1.com    
example2.domain1.com 
example3.domain1.com

Eu quero substituir esses nomes de subdomínios por domain2.com . Eu tentei usar o comando abaixo sed. Ele funciona bem se o tamanho do arquivo for pequeno. Mas, para arquivos grandes, parece que a execução do comando nunca termina. Eu quero usar um curinga aqui, pois o texto a ser substituído tem o mesmo nome de domínio, ou seja, domínio1.com.

sed -i s/.*.domain1.com/domain2.com/g test.txt
    
por Rajesh Keladimath 06.04.2018 / 06:25

2 respostas

4

Se você usar .*.domain1.com como seu padrão, corresponderá essencialmente a caracteres indesejados, porque . significa qualquer caractere .
Você deseja substituir apenas "caracteres de palavra" (letras ASCII, dígitos ou sublinhados) usando \w+ .

Como normal sed regex não sabe sobre + , certifique-se de adicionar -r para sed para usar regex estendido.

Certifique-se também de usar aspas! Caso contrário, * pode ser interpretado por bash.
E você deve escapar de . no padrão, caso contrário, ele também corresponderá a qualquer caractere.

sed -i.bak -r 's/\w+\.domain1\.com/domain2.com/g' file
    
por RoVo 06.04.2018 / 10:27
1

Use sed -i 's/domain1/domain2/' infile .

Se você quiser substituir *.domain1.com , mude como:

sed 's/.*domain1/domain2/' infile

Certifique-se de que, na primeira tentativa, não use -i , que substituirá o in-loco no seu arquivo.

    
por devWeek 06.04.2018 / 09:00