我有一个 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; }'
然而,这个命令会把有两个姓氏的人搞乱:
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