웹 페이지에서 이름을 변수로 읽는 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