돼지 라틴어 계산기를 만들려고 하는데 특정 부분에서 막히네요. "apple"이라는 문자열이 있다고 가정해 보겠습니다. 변환하려면 끝에 "way"를 추가하면 "appleway"가 됩니다. 지금까지 이 부분을 마쳤습니다.
내가 붙어있는 것은 "스포츠"와 같은 문자열입니다. 이렇게 하려면 마지막 첫 번째 모음 앞에 자음을 넣은 다음 "ay"를 추가하면 "ortsspay"가 됩니다.
문자열이 올바르게 변환되도록 첫 번째 모음 앞에 자음을 가져오는 방법을 알 수 없습니다.
답변1
매개변수를 사용한 확장 bash
:
${var%%[AaEeIiOoUu]*}
- 패턴은
[AaEeIiOoUu]*
탐욕스럽게(%%
) 오른쪽 변수에서 일치하는 부분을 제거합니다var
. 여기서는 대문자 또는 소문자 모음([AaEeIiOoUu]
)으로 시작하고 그 뒤에 아무 것도(*
) 가 옵니다.
예:
$ var=sports
$ echo "${var%%[AaEeIiOoUu]*}"
sp
$ var=foobar
$ echo "${var%%[AaEeIiOoUu]*}"
f
답변2
$ echo "sports" | sed 's/.*\([a-z]\)[aeiouAEIOU].*/\1/'
p
와일드카드가 너무 많습니다.
$ echo "spozzzzzzzzzo" | sed 's/\([a-z]\)[aeiouAEIOU].*/\1/'
sp
@Fiximan, 그건 잘 모르겠습니다.
$ echo "spozzzzzzzzzo" | sed 's/\(b-df-hj-np-tv-z\{1,\}\)[aeiou].*/\1/'
spozzzzzzzzzo
@Sundeep 네, 작동합니다...
$ echo "spozzzzzzzzzo" | sed 's/\([^aeiou]*\).*/\1/i'
sp
나는 heemayl의 원래 bash +1을 선호한다고 말해야 합니다. 아주 좋습니다!