Imprimir segunda vogal na palavra na cor vermelha

0

Como imprimo a segunda vogal em uma palavra na cor vermelha ou azul. Vamos dizer que eu executo o meu script chamado "script1", que lê um arquivo de texto. Meu script deve ser capaz de imprimir a segunda vogal em cada palavra na cor vermelha ou azul. Se houver apenas uma vogal, imprima em cor. Se não houver vogais, imprima a primeira letra com uma palavra colorida!

    
por Hassen Fatima 22.03.2015 / 14:56

2 respostas

1
#!/bin/bash

filename="./file" # change this filename according to your requirements
red=$'\e[31m'
reset=$'\e[0m'

# read single line from $filename in $line (see last "done", last line of code)
while read -r line; do 

  # loop over every single word in $line
  for word in $line; do
    vc=$(tr -cd '[aeiouAEIOU]' <<< "$word") # remove all but vowels

    case ${#vc} in                          # ${#vc}: number of vowels
      0)                                    # no vowel
        sed -E "s/^./${red}&${reset}/" <<< "$word"
        ;;
      1)                                    # one vowel
        sed -E "s/^([^aeiou]*)([aeiou]+)(.*)$/${red}${reset}/i" <<< "$word"
        ;;
      *)                                    # two or more vowels
        sed -E "s/^([^aeiou]*[aeiou][^aeiou]*)([aeiou])(.*)$/${red}${reset}/i" <<< "$word"
        ;;
    esac

  done | tr "\n" " "
  echo
done < "$filename"

Desvantagem: você solta espaços em branco e tabulações consecutivas na saída.

Mais informações: help <command> ou man <command> ou info <command>

    
por Cyrus 22.03.2015 / 16:45
0

Que tal usar o grep para colorir o jogo, junto com algum PCRE-fu? algo como

grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]'

onde

  • \b para corresponder a um limite de palavras; então
  • [^aeiou\s]* corresponde a zero ou mais caracteres não vocálicos e não espaciais
  • [aeiou] para corresponder à primeira vogal
  • [^aeiou\s]* corresponde a outro zero ou mais caracteres não vocálicos e não espaciais
  • \K para excluir todos os itens acima da expressão final correspondente (efetivamente, uma declaração de tamanho de comprimento variável )
  • finalmente, [aeiou] para corresponder à segunda vogal desejada

    
por steeldriver 22.03.2015 / 18:40