Eu não tenho certeza se isso é possível fazer com sed
(eu suspeito que provavelmente não é), mas é muito fácil de fazer com o Python! Aqui está um script que faz exatamente o que você quer:
#!/usr/bin/env python2
# -*- coding: ascii -*-
"""modify_strings.py"""
import sys
import re
import fileinput
# Iterate over lines of input
# (either read from files or from stdin)
for line in fileinput.input():
# Split each line into tokens and preserve whitespace
tokens = re.split(r'(\s+)', line)
# Iterate over tokens
for token in tokens:
# If a word ends in 'o' then
# perform the desired transformation
if token.endswith('o'):
token = token[:-1].replace('i', 'a')
# Print out each token
sys.stdout.write(token)
Você pode executá-lo assim:
echo 'filo fililo felo fale' | python modify_strings.py
E produz a seguinte saída (conforme desejado):
fal falal fel fale
Se você realmente quer que sed
esteja envolvido, então provavelmente você pode conseguir o que quer, aumentando-o com um pequeno script de shell. Isso pode ser parecido com o seguinte script bash
:
#!/usr/bin/env bash
# modify-strings.bash
for word in "$@"; do
if grep -q 'o$' <<<"${word}"; then
echo -n "${word} " | sed -e 's/i/a/g' -e 's/o$//';
else
echo -n "${word} ";
fi;
done
echo
Você chamaria esse script assim:
bash modify-strings.bash filo fililo felo fale