2017-02-16 7 views
1

Ich bin Anfänger in Shell-Skript. Ich habe eine Variable, die einen Wert mit einem = -Zeichen enthält. Ich möchte ein Zitat in Felder nach = Zeichen hinzufügen.Feldtrennung mit Hinzufügen von Anführungszeichen

abc="source=TDG" 
echo $abc|awk -F"=" '{print $2}' 

Mein Code druckt nur ein Feld. meine erwartete Ausgabe ist

source='TDG' 

Bitte helfen Sie mir.

Antwort

3
$ abc='source=TDG' 
$ echo "$abc" | sed 's/[^=]*$/\x27&\x27/' 
source='TDG' 
  • [^=]*$ Spiel nicht = Zeichen am Ende der Zeile
  • \x27&\x27 einfache Anführungszeichen um den gefundenen Text hinzufügen


Mit awk

$ echo "$abc" | awk -F= '{print $1 FS "\047" $2 "\047"}' 
source='TDG' 
  • -F= Eingabefeld Separator ist =
  • print $1 FS "\047" $2 "\047" Druck erstes Feld durch Eingabefeld Separator, gefolgt von einfachen Anführungszeichen dann zweites Feld und weitere Apostrophe
  • how to escape single quote in awk inside printf finden Sie weitere Möglichkeiten, von einfachen Anführungszeichen in Druck Handhabung


Mit bash parameter expansion

$ echo "${abc%=*}='${abc#*=}'" 
source='TDG' 
  • ${abc%=*} löschen letztes Vorkommen von = und null oder mehr Zeichen, nachdem es
  • ${abc#*=} löschen null oder mehr Zeichen und erste = vom Beginn der Zeichenfolge
+0

Tauschen Sie Ihre Verwendung von Zitaten in sed, so dass Sie diesen hässlichen Hex-Codes vermeiden können: '„‚‘“' – Harvey

+1

@Harvey, während es in diesem Fall funktionieren würde, muss man vorsichtig mit doppelten Anführungszeichen, wie es sein wird von Shell interpretiert werden, bevor es an sed übergeben wird – Sundeep

3

Sed wären die bessere Wahl sein:

echo "$abc" | sed "s/[^=]*$/'&'/" 

Awk kann es tun, aber braucht zusätzliche Bits:

echo "$abc" | awk -F= 'gsub(/(^|$)/,"\047",$2)' OFS== 
0
What is taking place? 

Unter Verwendung von TDG zu umgeben mit einfachen Anführungszeichen durch seine Oktal nr zu zitieren Probleme zu vermeiden.

echo "$abc" | awk '{sub(/TDG/,"\047TDG\047")}1' 
source='TDG' 
+1

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontextes hinsichtlich dessen, warum und/oder wie er die Frage beantwortet, seinen langfristigen Wert signifikant verbessern. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. – CodeMouse92

Verwandte Themen