2017-09-28 3 views
2

Ich habe folgende yml Datei:Kann nicht Versionstag in Docker compose Datei aktualisieren mit sed

api: 
    restart: always 
    image: docker.registry-test.com/api:3.4.1 

api-server: 
    restart: always 
    image: docker.registry-test.com/api-server 

Ich bin mit sed die Version des Bildes 3.4.2 in api Abschnitt zu aktualisieren:

sed -i "/^[[:space:]]*api:/,/^[^[:space:]]/ s/\(docker.registry-test.com\/api\).*$/\1:3.4.2/" docker.yaml 

Aber es ändert auch den Image-Namen und die Version in api-Server-Abschnitt. Ich versuche eine Änderung zu vermeiden vermeiden, zweiten Abschnitt zu ändern.

+3

Sollten Sie keinen richtigen 'YAML' Parser verwenden? 'bash' liefert nativ keinen, aber Sie sollten' python' verwenden – Inian

Antwort

0

gemacht Nur eine kleine Änderung (bewegt Colon):

sed -i "/^[[:space:]]*api:/,/^[^[:space:]]/ s/\(docker.registry-test.com\/api:\).*$/\13.4.2/" docker.yaml 
0

sollte dies in GNU Sed funktionieren.

ubuntu$ sed -E 's/(api:)([0-9.]+)/api:3\.4\.2/g' text.txt 
api: 
    restart: always 
    image: docker.registry-test.com/api:3.4.2 

api-server: 
    restart: always 
    image: docker.registry-test.com/api-server 

Lassen Sie mich wissen, ob es für Sie arbeitet.