Sed-Skript - Namen umkehren

Sed-Skript - Namen umkehren

Ich habe eine Textdatei mit mehreren Namen, die so angeordnet sind, dass der Vorname zuerst und der Nachname an zweiter Stelle steht. Wie kann ich mit Sed diese Reihenfolge der Namen umkehren, sodass der Nachname zuerst und der Vorname zuletzt steht?

Ich habe zum Beispiel Zeilen wie die folgenden

Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400

Ich möchte, dass sie so aussehen

Blenheim Steve:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Boop Betty:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Chevsky Igor:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400

Antwort1

Durch sed,

$ sed 's/^\([^ ]*\) \([^:]*\)/\2 \1/' file
Blenheim Steve:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Boop Betty:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Chevsky Igor:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400

Erläuterung:

  • ^Behauptet, dass wir am Anfang stehen.
  • \(...\)Standardmäßig verwendet sed BRE (Basic Regular Expressions). In BRE werden Erfassungsgruppen durch \(-> Beginn einer Erfassungsgruppe, \)-> Ende einer Erfassungsgruppe angegeben.
  • [^ ]*Stimmt mit jedem Zeichen überein, jedoch nicht mit dem Leerzeichen, und zwar null oder mehrmals.
  • Die kombinierte Form \([^ ]*\)würde also die Zeichenfolge null oder mehr Zeichen außer Leerzeichen erfassen. Das ist das erste Wort.
  • Entspricht einem Leerzeichen.
  • \([^:]*\)Erfasst beliebige Zeichen, jedoch nicht :null oder mehr Mal.
  • Im Ersetzungsteil wird zuerst der Gruppenindex 2 und dann der Index 1 angegeben. Die Übereinstimmung wird also in umgekehrter Form gedruckt.

Durch Perl,

perl -pe 's/^(\S+)\s([^:]+)/\2 \1/' file

verwandte Informationen