Удаление всех гласных, но первый из набора строк

У меня есть строка, состоящая из нескольких подстрок, разделенных символами подчеркивания. Например: AbcdAEfd_hEgdgE_AbAAAAA . Мне нужно удалить все гласные, кроме первого из каждой подстроки. Так:

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

Результирующая строка должна быть Abcdfd_hEgdg_Ab

4 Solutions collect form web for “Удаление всех гласных, но первый из набора строк”

Чистое решение 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." 

Вы можете использовать синтаксис regex с нулевой шириной в perl .

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

Этот следующий фрагмент рассматривает входную строку как одну строку (а не несколько подстрок).

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

Рассчитывает ли python? Это должно работать:

 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']))" 

Я тоже пробовал с тройником и назвал трубы, но это не получилось:

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

Это может сработать для вас (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 
  • Как переменные могут использовать «~» для cd'ing?
  • Почему звездочка в команде приводит к расширению цикла?
  • bash - как преобразовать несколько строк в одну строку для sh -c
  • Долларовая интерполяция знаков внутри кавычек в bash
  • Блокировать определенный IP-адрес от доступа к шлюзу
  • В чем разница, имеющая двойные кавычки или нет в bash
  • Как вызвать скрипт с шаблоном подстановки и еще два аргумента?
  • Почему $ является символом по умолчанию для оболочки пользователя и # символом по умолчанию для корневой оболочки?
  • Что делает опция -C для вывода в ls?
  • Почему \ n расширяется до n в bash?
  • Сценарий оболочки выполняется по-разному на основе рабочего каталога.
  • Linux и Unix - лучшая ОС в мире.