Wie kann ich Zeichen über einen Doppelpunkt hinweg vertauschen?

Wie kann ich Zeichen über einen Doppelpunkt hinweg vertauschen?

Ich möchte Zeichen über einen Doppelpunkt hinweg vertauschen, sodass die beiden Seiten sich gegenseitig ersetzen.

Beispiel: Eingabe

1: Hello
2: World
3: I
4: am 
5: Brendan

Ausgabe:

Hello: 1
World: 2
I: 3
am: 4
Brendan: 5

Ich habe versucht, cut und sed zu verwenden, konnte aber keine richtige Methode finden.

Antwort1

Sie können dies versuchenawk

awk 'BEGIN{FS=OFS=": "}{print $2, $1}' file.txt 

Oder sed, das hat eine -EOption.

sed -E 's/(.+): (.+)/\2: \1/' file.txt 

Oder eine langsamere, wenn nicht die langsamste Shell-Lösung.

while IFS=": " read -r first second; do
  printf '%s: %s\n' "$second" "$first"
done < file.txt 

Antwort2

Versuchen Sie Folgendes, unabhängig davon, ob die Eingabe aus einer oder mehreren Zeilen besteht:

awk 'BEGIN{FS="[: ]*"; OFS=":" }{for (i=2; i<=NF; i+=2) printf "%s: %s ", $i, $(i-1); print _}' file

verwandte Informationen