La solucion con
tr seria esta:
cat poema2 | tr "e" "a" > poema3
cat poema3 | tr "i" "e" > poema4
cat poema4 | tr "o" "u" > poema5
cat poema5 | tr "u" "o" > poema6
cat poema7 | tr "a" "u" > poema8
De lo contrario estarias aplicando el
tr solo a poema2, borrano y creando nuevamente poema3.
Lo de
while es simple: le pasamos a while la salida de
cat usando
pipes (el |) y de ahi, este lee 1 byte (ese es el flag -n 1) que es un caracter y lo asigna a $i.
En ese ejemplo,
read incluye retornos de carro ("n") y todo tipo de caracteres.
Ahora, te toca ver como usar
while,
read e
if para hacer lo que quieres... o usar la otra solucion.