Digamos que un archivo (socket.cfg) tiene lo siguiente

socket1:a:1.2.3.4:wso,ws1,ws2
socket2:b:2.5.6.7:ws3,ws5,ws7

Ahora quiero cambiar solo la IP donde "socket1" contiene en la línea y el resto debe permanecer igual. Los datos que se me dieron serían solo socket1 e IP que se cambiarían.

Probé lineinfile y reemplacé el módulo, pero todo el patrón cambia. Amablemente ayúdame. Es similar al comando sed como este sed /socket1/<Ip_pattern>/<replacing_IP> Así que esto va a la línea socket1, elige la IP y reemplaza solo eso. Quiero algo como esto.

0
Kushal 20 ene. 2021 a las 13:50

1 respuesta

La mejor respuesta

Esto es lo que necesita,

- name: replace the ip address
  lineinfile:
    path: /path/to/socket.cfg
    regexp: ^(socket1)(.*)(\d+.\d+.\d+.\d+)(.*)
    line: \g<1>\g<2>{{ inventory_hostname }}\g<4>
    backrefs: yes

Nota: He usado grupos de expresiones regulares mientras reemplazaba el contenido.

Reemplacé la IP con la inventory_hostname que es localhost en mi caso, puedes actualizarla a lo que quieras.

Entrada:

socket1:b:1.2.3.4:ws3,ws5,ws7
socket2:b:2.5.6.7:ws3,ws5,ws7

Salida:

socket1:b:localhost:ws3,ws5,ws7
socket2:b:2.5.6.7:ws3,ws5,ws7
1
Zeitounator 20 ene. 2021 a las 12:21