Ich habe eine Datei file.txt wie unten, die Schlüsselwertpaare enthält, die durch ein Doppelpunkt-Leerzeichen (:) getrennt sind.
Code: Select all
key1: "Subject %D: %W warning(s), %V Violation(s)"
key2: 'sample: value'
key3: "value3"
key4: 'value4'
Ich möchte die Ausgabe wie folgt. Entfernen Sie grundsätzlich alle einfachen oder doppelten Anführungszeichen aus dem Wert und ersetzen Sie das Doppelpunkt-Leerzeichen durch =.
Code: Select all
key1=Subject %D: %W warning(s), %V Violation(s)
key2=sample: value
key3=value3
key4=value4
Ich habe awk ausprobiert
Code: Select all
awk -F': ' '{ gsub(/^'\''|'\''$/, "", $2); gsub(/^'\"'|'\"'$/, "", $2); print }' OFS='='
aber ich erhalte die folgende Ausgabe. Es schlägt fehl, wenn der Wert ein Doppelpunkt-Leerzeichen enthält.
Code: Select all
key1=Subject %D=%W warning(s), %V Violation(s)"
key2=sample=value'
key3=value3
key4=value4
Habe auch den folgenden SED ausprobiert, der das gleiche Problem wie awk hat.
Code: Select all
sed -i -e "s/: '/=/" -e "s/'$//" -e 's/: "/=/' -e 's/"$//' -e "s/: /=/" file.txt
Code: Select all
key1=Subject %D=%W warning(s), %V Violation(s)
key2=sample=value
key3=value3
key4=value4
Gibt es eine Möglichkeit, dies mit wenigen Codezeilen unter Unix zu erreichen?
Ich habe eine Datei file.txt wie unten, die Schlüsselwertpaare enthält, die durch ein Doppelpunkt-Leerzeichen (:) getrennt sind.
[code]key1: "Subject %D: %W warning(s), %V Violation(s)"
key2: 'sample: value'
key3: "value3"
key4: 'value4'
[/code]
Ich möchte die Ausgabe wie folgt. Entfernen Sie grundsätzlich alle einfachen oder doppelten Anführungszeichen aus dem Wert und ersetzen Sie das Doppelpunkt-Leerzeichen durch =.
[code]key1=Subject %D: %W warning(s), %V Violation(s)
key2=sample: value
key3=value3
key4=value4
[/code]
Ich habe awk ausprobiert
[code]awk -F': ' '{ gsub(/^'\''|'\''$/, "", $2); gsub(/^'\"'|'\"'$/, "", $2); print }' OFS='='
[/code]
aber ich erhalte die folgende Ausgabe. Es schlägt fehl, wenn der Wert ein Doppelpunkt-Leerzeichen enthält.
[code]key1=Subject %D=%W warning(s), %V Violation(s)"
key2=sample=value'
key3=value3
key4=value4
[/code]
Habe auch den folgenden SED ausprobiert, der das gleiche Problem wie awk hat.
[code]sed -i -e "s/: '/=/" -e "s/'$//" -e 's/: "/=/' -e 's/"$//' -e "s/: /=/" file.txt
[/code]
[code]key1=Subject %D=%W warning(s), %V Violation(s)
key2=sample=value
key3=value3
key4=value4
[/code]
Gibt es eine Möglichkeit, dies mit wenigen Codezeilen unter Unix zu erreichen?