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

У меня есть строка, состоящая из нескольких подстрок, разделенных символами подчеркивания. Например: 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 
  • Почему это значение PS1 вызывает неожиданное поведение?
  • Какова концепция, скрытая за термином «команда»?
  • как выразить строку в оболочке?
  • Вопрос возврата каретки
  • что означает «tc @ box: / home $»?
  • Передача аргументов с пробелами и кавычками в скрипт (без цитирования всего)
  • Найдите слово в предложении с Bourne Shell (sh)
  • Как получить последние N команд из истории?
  • Можете ли вы изменить формат timestamp для команды history на tcsh
  • Как узнать последовательность эвакуации, которую посылают мои клавиатуры на терминал?
  • Измените каталог с пробелом, за которым следует '('
  • Interesting Posts

    Команда для отображения использования памяти, использования диска и загрузки процессора

    Как заново раскрутить USB-файл .img, чтобы использовать другой загрузчик?

    Как я могу правильно удалить строку, которая будет передана оболочке с аргументом команды

    Как я могу перечислить все сокеты, которые открыты для удаленных компьютеров?

    Фиксирование сломанной пакетной системы (apt-get)

    Терминатор не запускается в i686, проблема DBus в Python

    Не удалось успешно форматировать флеш-накопитель 64G USB на centos 6.2 / centos 6.3

    Как я мог перевернуть содержимое двоичного файла с помощью команд bash

    Как увеличить лимит открытых файлов для всех процессов?

    Расход трафика Solus

    Как я могу исправить / dev / pts после его установки?

    Печать в одну строку общего текста с помощью comm cmd?

    dracut загрузочный каталог md5sum

    Установка openambit на Ubuntu 12.04

    Команда Shell для чтения регистров устройства?

    Linux и Unix - лучшая ОС в мире.