közben olvasgatom, és próbálom újra megérteni mit szeretnél :)
ha jól tévedek, akkor ezzel megkapod azokat a szavakat, amelyeket ki szeretnél venni. csak sajnos ismeretem szerint, a -o kapcsolónál nem működik a -v negáció.
echo "ki kell venni ezt: foo afoo de maradhat afo es fo is" | grep -ioE "[^ ]*foo[^ ]*"
tehát ez elvileg pont azokat a szavakat írja ki, amelyeket ki szeretnél venni. jól értem?
csak persze te fordítva szeretnéd, vagyis a többi szót meghagyni ha jól tévedek. ezen még elgondolkzok.. :)
szerk.: egy olyan eszembe jutott, hogy a fenti kimeneteit kivetetni külön sed-del egy while loop használatával:
TEXT="ki kell venni ezt: foo afoo vagy foob de maradhat afo es fo is"
echo "$TEXT" | grep -ioE "[^ ]*foo[^ ]*" | while read F
do
echo "$F"
TEXT=$( echo "$TEXT" | sed -r s/"$F "/""/ )
echo "$TEXT"
done
szerk2.: talán még egyszerűbb lenne ez (mivel a '*' nem úgy működik sed-nél mint grep-nél, ezért 3 esetre bontva):
TEXT="ki kell venni ezt: foo aafoo vagy foobcd de maradhat afo es fo is"
echo "$TEXT" | sed -r s/"foo "/""/ | sed -r s/"[^ ]+foo "/""/ | sed -r s/"foo[^ ]+ "/""/