I “m a következő parancs használatával a mac-on:
$find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \;
és úgy tűnik, hogy nincs hatása.
A könyvtárban két fájl van, amelyek .java végződésűek, és mindkettőjüknek van foo szöveg bennük. Hiányzik valami?
SZERKESZTÉS: A megjegyzések kérésének eredményei
[aafghani-03:~/test amirafghani]$ find . -name "*.java" -exec sed -i "s/foo/bar/g" {} \; sed: 1: "./bar.java": invalid command code . sed: 1: "./foo.java": invalid command code .
Megjegyzések
Válasz
Először is győződjön meg róla, hogy a szokásos ascii-t használja. olyan idézetek, mint "
és "
(ascii kódok 0x22
és 0x27
, ill.) a shell szkriptekben, mert a bejegyzésben szereplő példa nem szabványos idézőjeleket tartalmaz. Ha jól megnézed, akkor kissé másképp néznek ki. Valószínűleg ez egy copy-paste hiba egy gazdag szöveges dokumentumból formátum, például Word, OOWriter vagy akár egy böngészőablak.
Mivel Ön Mac számítógépet használ, valószínűleg a sed
FreeBSD implementációja van, amelyben esetben a parancsot így kell megírnod:
find . -name "*.java" -exec sed -i "" s/foo/bar/g {} +
(itt a +
szót használd a \;
egy sed
fájlonkénti meghívás futtatásának elkerülése érdekében.
A sed
a jelzőnek argumentumra van szüksége: egy biztonsági másolat fájl kiterjesztésére. Például a -i .bak
paranccsal a parancs először file1.txt
néven biztonsági másolatot készít file1.txt.bak
néven, mielőtt elvégezné a az eredeti fájlt. Üres argumentum használata ""
azt jelenti, hogy nem használ biztonsági mentési fájlt, ami úgy tűnik, amit szeretnél.
Ugyanez a GNU-ban (vagy NetBSD-ben, OpenBSD-ben) , busybox) megvalósítása a következő lenne:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Köszönöm @bahamat és @Mikel és @ pieter-breed , hogy javítsam válaszaimat kommentjeivel.
Megjegyzések
- Mit csinálnak a göndör zárójelek?
- @ZaneHitchcox, a göndör zárójelek a megfelelő fájlnév helyőrzői
- mi ' s a
+
a végén? - @Anthony a
+
a végén befejezi a-exec
opció argumentumlistáját. A-exec
szintaxisa megköveteli.
-exec
fájlt és mindent utána? Kinyomtatja a Java fájlok nevét? (aggódtam ' hogy ' intelligens idézőjeleket használ az ASCII idézetek helyett.)"
és'
által.