
Webページに名前を変数として読み取るbashスクリプトがあり、このスクリプトはLASTNAME Firstname形式を使用します。
SANCHEZ Rick
SMITH Morty
VAN SOMETHING Halen
ただし、各名前を名姓としてマークする必要があります。
Rick SANCHEZ
Morty SMITH
Halen VAN SOMETHING
小文字の大文字の名前を識別し、大文字の城の前に置く方法を探しています。
私が得た最も近いもの
echo $eachname | awk '{ for (i=NF; i>1; i--) printf("%s ",$i); print $1; }'
しかし、この命令は2つの姓を持つ人々を混同させます。
Rick SANCHEZ
Morty SMITH
Halen SOMETHING VAN
答え1
sed
名前と姓が複数ある場合は、次の可能性があります。
SANCHEZ Rick Ignatius Alexander
SMITH Morty
FOO VAN SOMETHING Halen
注文する。
sed 's/^\([^a-z]*\)[[:blank:]]\(.*\)$/\2 \1/' file
出力:
Rick Ignatius Alexander SANCHEZ
Morty SMITH
Halen FOO VAN SOMETHING
これがあなたにうまくいくかどうか教えてください。
答え2
sed
または最後に中間名を保持する代替
この入力
SANCHEZ Rick
SMITH Morty
VAN SOMETHING Halen
MCSMITH Some Body
これで
sed -E "s/^([A-Z ]+) ([A-Z][a-z]+)(.*)/\2 \1\3/" file1
この出力を提供します
Rick SANCHEZ
Morty SMITH
Halen VAN SOMETHING
Some MCSMITH Body