I ”m käyttämällä seuraavaa komentoa Macissani:
$find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \;
ja sillä ei näytä olevan vaikutusta.
Minulla on kaksi tiedostoa hakemistossa, jotka päättyvät .java-tiedostoon, joilla molemmilla on foo teksti niissä. Puuttuuko minusta jotain?
MUOKKAA: Tulokset kommenttipyynnöstä
[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 .
Kommentit
Vastaa
Varmista ensinnäkin, että käytät tavallisia ascii-tiedostoja lainaukset, kuten "
ja "
(ascii-koodit 0x22
ja 0x27
, vastaavasti) shell-komentosarjoissa, koska viestisi esimerkki sisältää epätyypillisiä lainausmerkkejä. Jos katsot tarkkaan, ne näyttävät hieman erilaisilta. Todennäköisesti tämä on kopioi-liitä-virhe rikkaasta tekstidokumentista muodossa, kuten Word, OOWriter tai jopa selainikkuna.
Koska olet Macissa, sinulla on todennäköisesti FreeBSD-toteutus sed
, jossa tapauksessa sinun on kirjoitettava komento tällä tavalla:
find . -name "*.java" -exec sed -i "" s/foo/bar/g {} +
(tässä käytetään +
-tunnusta \;
, jotta vältetään yhden sed
-kutsun suorittaminen tiedostoa kohden).
FreeBSD: n sed
-lippu tarvitsee argumentin: varmuuskopiotiedoston laajennuksen. Esimerkiksi komennolla -i .bak
komento varmuuskopioi file1.txt
nimellä file1.txt.bak
ensin ennen korvaamisen suorittamista alkuperäisen tiedoston. Tyhjän argumentin käyttäminen ""
tarkoittaa, että varmuuskopiotiedostoa ei käytetä, mikä näyttää olevan haluamasi.
Sama asia GNU: ssa (tai NetBSD, OpenBSD , busybox) toteutus olisi:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Kiitos @bahamat ja @Mikel ja @ pieter-breed vastauksen parantamiseksi kommenteillasi.
Kommentit
- Mitä kiharat ovat?
- @ZaneHitchcox kiharat ovat vastaavan tiedostonimen paikkamerkkejä
- mitä ' s mitä
+
tekevät lopussa? - @Anthony
+
lopussa päättää-exec
-vaihtoehdon argumenttiluettelon. Se vaaditaan-exec
-syntaksissa.
-exec
ja kaiken sen jälkeen? Tulostaako se Java-tiedostojen nimet? (Olen ' huolissani ' käytät älykkäitä lainausmerkkejä ASCII-lainausten sijaan.)"
ja'
.