tobb fajlban szocsere

Fórumok

hi,

Hogy tudnék több fájlban kicserélni egy szócskát ? Azt látom, hogy a sed parancsot kell használni valahogy így:

sed 's/szocska/masikszocska/g' Shortcut.desktop > Shortcutx.desktop

Azért shortcutx, mert ha ua. a fajl neve, akkor 0 byte-os lesz.Szóval ezt kellene nekem több (100) fajlra alkalmaznom.
Talán csináljak egy fajl listát és onnan olvastassam ki a neveket, és abból egy script ? hujjuj...

köszi

Hozzászólások

Ha nincsenek "perverz" fájlneveid, akkor például így:

ls | while read a ; do vim -e -s -c '%s/egyikszo/masikszo/ge|wq' $a ; done

Persze az ls helyére tehetsz bármit, ami a feldolgozni kívánt fájlokat kiírja.

aha, megvan miért csinálta.Ahol szóköz van, vagy speciális karakter (amit írtál), ott nem csinálja meg.
okés, mondjuk kiveszem ezeket a fajlokat, hogy tudom megtenni, hogy ne egyesével keljen futtatni ?

--
Unfortunately, no one can be told what The Matrix is. You have to see it for yourself.

Ha a vim nem megy, akkor használjunk egy még klasszikusabb eszközt:

ls | while read a; do echo -e '%s/egyik/masik/g\nwq' | ed -s $a 2>/dev/null ; done

Az a csúnya /dev/null azért van ott, ha olyan fájlra futsz rá, amiben nincs mit lecserélni. A vim-ben ezt az "e" flag megoldja, de az ed egy kicsit régebbi és butább jószág :)

Ha a sed, amit irtal, az egyedi fileokra szepen mukodik, akkor:


for f in *.ezek.*.a.*.fileok ; do
    test -f "$f" || continue 
    d=`dirname "$f"`
    t=`mktemp -p $d`
    if sed 's/szocska/masikszocska/g' < "$f" > "$t" ; then
        ln -f "$t" "$f"
        rm "$t"
    else
         echo "error: sed and/or creation of output file failed."
    fi
done
 perl -pi -e 's|szocska|masikszocska|g' mappa/fajlok*

Ez uj fajl letrehozasa nelkul irja at.

--
"There are two kinds of people in this world, and you're not one of them."

sed -i 's/szocska/masikszocska/g' *

--
Elméletileg nincs különbség elmélet és gyakorlat között. Gyakorlatilag van.

Nézegesd a sed "-i" kapcsolóját...