String
查找大寫的小寫字元串並放在大寫字元串之前
我有一個 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