Sed スクリプト - 名前の反転

Sed スクリプト - 名前の反転

複数の名前が入ったテキスト ファイルがあり、名前が最初に、姓が 2 番目に並んでいます。Sed を使用して、名前の順序を逆にして、姓が最初、名が最後になるようにするにはどうすればよいでしょうか。

例えば以下のような行があります

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

こんな感じにしたい

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

答え1

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

説明:

  • ^我々はスタート地点にいると主張します。
  • \(...\)\(デフォルトの sed は BRE (基本正規表現) を使用します。BRE では、キャプチャ グループは-> キャプチャ グループの開始、\)-> キャプチャ グループの終了で示されます。
  • [^ ]*スペース文字を除く任意の文字に 0 回以上一致します。
  • したがって、結合された形式では、\([^ ]*\)スペース以外の文字が 0 個以上含まれる文字列が取得されます。これが最初の単語です。
  • スペースに一致します。
  • \([^:]*\)任意の文字をキャプチャしますが、:0 回以上はキャプチャしません。
  • 置換部分では、グループ インデックス 2 を最初、インデックス 1 を 2 番目として参照します。これにより、一致したものが逆の形式で印刷されます。

Perlを通じて、

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

関連情報