br evita remover o resto da linha

2

Eu tenho um arquivo contendo uma linha que eu quero substituir algo no meio dela:

database.url=jdbc:mysql://my.sql.ip.address:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

Suponha que eu queira alterar o endereço IP; Eu usei o seguinte comando sed :

sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/zizi/' myFile

Esta saída:

database.url=jdbc:mysql://zizi

Mas eu quero:

database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

Como devo escrever meu sed ? Existe algum outro comando que eu possa usar para melhor entender isso?

    
por Zeinab Abbasimazar 28.08.2017 / 09:55

3 respostas

5

Basta imprimir o segundo próximo grupo capturado, bem como (não estou modificando ou aprimorando seu sed )

sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/zizi/' myFile

este é um comando aprimorado para alterar apenas a parte correspondente do IP.

sed 's/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt

Se apenas as linhas começarem com database.url :

sed '/^database\.url/ s/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt

Ou mais sed de capacidade e ainda mais curto.

sed 's/\([1-9]\)\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/NEW/'

Observe que isso também pode mudar e melhorar para corresponder ao endereço IP exato em vez de corresponder. 1.1.1.999 como um IP que não é válido.

    
por 28.08.2017 / 10:04
3

Mais curta abordagem sed :

sed 's~\(.*mysql://\)[^:]*~zizi~' file

A saída:

database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
    
por 28.08.2017 / 10:35
0

Solução sed curta sem truques:

$ sed 's#//[^:]*#//zizi#' file
database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

Isso substitui tudo entre // e o imediatamente seguinte : com a string que você deseja inserir.

    
por 03.09.2017 / 13:48