String

查找大寫的小寫字元串並放在大寫字元串之前

  • April 21, 2020

我有一個 bash 腳本從網頁中讀取名稱作為變數,它使用格式 LASTNAME Firstname:

SANCHEZ Rick
SMITH Morty
VAN SOMETHING Halen

但是,我需要將每個名稱顯示為 Firstname LASTNAME:

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

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

告訴我這是否適合你。

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

引用自:https://unix.stackexchange.com/questions/581609