( log69 | 2010. 08. 06., p – 13:38 )

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[^ ]+ "/""/