문자열 세트에서 첫 번째 모음을 제외한 모든 모음 제거

문자열 세트에서 첫 번째 모음을 제외한 모든 모음 제거

밑줄로 구분된 여러 하위 문자열로 구성된 문자열이 있습니다. 예를 들어: AbcdAEfd_hEgdgE_AbAAAAA. 각 하위 문자열에서 첫 번째 모음을 제외한 모든 모음을 제거해야 합니다. 그래서:

  • AbcdAEfd->Abcdfd
  • hEgdgE->hEgdg
  • AbAAAAA->Ab

결과 문자열은 다음과 같아야 합니다.Abcdfd_hEgdg_Ab

답변1

매개변수 대체만 사용하는 순수 bash 솔루션:

#! /bin/bash
suffix=${1#*[aeiou]}
prefix=${1%$suffix}
vowel=${prefix: -1}
prefix=${prefix%?}                  # Remove the vowel from the prefix
suffix=${suffix//[aeiou]/}          # Remove the vowels.
echo "$1 -> $prefix$vowel$suffix."

답변2

perl을(를) 사용할 수 있습니다 .너비가 0인 뒷모습정규식 구문.

perl -pe "s/(?<=[aeiou])([^aeiou_]*)[aeiou]([^aeiou_]*)/\1\2/ig"

다음 코드 조각은 입력 줄을 단일 문자열(여러 하위 문자열이 아닌)로 처리합니다.

perl -pe "s/(?<=[aeiou])([^aeiou]*)[aeiou]/\1/ig"

답변3

파이썬이 중요합니까? 이것은 작동합니다:

cat anonymous.txt | python -c "import sys; x=sys.stdin.read(); print(x[0]+''.join([z for z in x[1:] if z not in 'AEIOUaeiou']))"

tee와 명명된 파이프로도 시도했지만 다소 실패했습니다.

makefifo pipe; cat anonymous.txt | tee >(cut -b1 >> pipe&) >(cut -b1- | tr -d aeiouAEIOU >> pipe&) > /dev/null; cat pipe | xargs -d '\n'

답변4

이것은 당신에게 도움이 될 수 있습니다 (GNU sed):

sed 's/^/\n/;ta;:a;s/\n$//;t;s/\n\([^aeiou_]*[aeiou]\)/\1\n/i;:b;s/\n\([^aeiou_]*\)[aeiou]/\1\n/i;tb;s/\n\([^aeiou]*\)/\1\n/i;ta' file

관련 정보