können Sie verwenden: sed -r 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: apache/' file
Probelauf:
$ cat file
web:
image: nginx
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$ sed -r 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: apache/' file
web:
image: apache
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
Um die Änderungen in die Datei bestehen können Sie verwenden in-place-Option so:
$ sed -ri 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: apache/' file
Wenn Sie es in einem Skript möchten, können Sie den sed
Befehl in einem Skript gerade auf und führen Sie es mit $1
in sustitution.
$ vim script.sh
$ cat script.sh
sed -ri 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: '"$1"'/' file
$ chmod 755 script.sh
$ cat file
web:
image: nginx
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$ ./script.sh apache
$ cat file
web:
image: apache
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$
Da es so aussieht, als würden Sie den Wert in einer docker-compose-Datei überschreiben wollen, sollten Sie sich meinen Docker [compose wrapper program] (https://pypi.python.org/pypi/ruamel.dcw) ansehen, der dies ermöglicht Standard, der durch Umgebungsvariablen überschrieben werden kann (z. B. um einen Unterschied zwischen einem Test- und einem Produktivsystem zu machen). Da es YAML 1.2 unterstützt, entlastet es Sie auch von der Notwendigkeit, Port-Mappings "3030: 3000" zu zitieren, die von compose's Standard YAML 1.1 Parser als Sexagesimale interpretiert werden könnten – Anthon