대문자 소문자 문자열을 찾아 대문자 문자열 앞에 배치합니다.

대문자 소문자 문자열을 찾아 대문자 문자열 앞에 배치합니다.

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

관련 정보