Ich versuche, einen Block von yml Datei mit dem folgenden Befehl zu entfernen,Ubuntu bash awk merkwürdiges Verhalten
awk '$1 == "tool:"{t=1}
t==1 && $1 == "ports:"{t++; next}
t==2 && /:[[:blank:]]*$/{t=0}
t != 2' file.yml
für folgende yml,
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
tool1:
image: tool1.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
Das Ziel ist es, die ports
zu entfernen Unterblock aus dem tool
Hauptblock. Diese Antwort von https://stackoverflow.com/a/37256824/698072 scheint perfekt zu sein, wenn sie ausprobiert wurde here. Aber es ist alles direkt von den Ports bis zum Ende der Yml-Datei in meinem Ubuntu 14.04 zu entfernen (versucht in sh und zsh in mehreren Systemen von 14.04).
Erwartet:
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
volume:
- "a:b"
tool1:
image: tool1.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
Ausgang:
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
Jede Hilfe zu diesem eigenartigen Fall wäre wirklich toll.
Bitte keine Bilder von Konsolensitzungen hinzufügen. Kopieren Sie den * Text * und fügen Sie ihn in Ihre Frage ein. – rici
Welche Version von awk verwenden Sie? Nicht alle Unterstützungszeichenklassen ('[[:: leer:]]') versuchen Sie stattdessen '[\ t]'. –