Jeg bruger den følgende kommando på min mac:
$find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \;
og det ser ud til at have nogen effekt.
Jeg har to filer i biblioteket, der ender på .java, som begge har foo tekst i dem. Mangler jeg noget?
EDIT: Resultater fra anmodning om kommentarer
[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 .
Kommentarer
Svar
Først og fremmest skal du sørge for at bruge regelmæssig ascii citater som "
og "
(ascii-koder 0x22
og 0x27
i shell-scripts, fordi eksemplet i dit indlæg indeholder ikke-standardiserede anførselstegn. Hvis du ser nøje ud, ser de lidt anderledes ud. Det er sandsynligvis en kopi-indsæt-fejl fra et rich text-dokument format som Word, OOWriter eller endda et browservindue.
Da du er på en Mac, har du sandsynligvis FreeBSD-implementeringen af sed
, hvor hvis du skal skrive kommandoen på denne måde:
find . -name "*.java" -exec sed -i "" s/foo/bar/g {} +
(her ved hjælp af +
i stedet for \;
for at undgå at køre en sed
påkald pr. Fil).
I FreeBSD-implementeringen af sed
-flag har brug for et argument: udvidelsen af en sikkerhedskopifil. For eksempel med -i .bak
vil kommandoen tage backup af file1.txt
som file1.txt.bak
først inden udskiftning i den originale fil. Brug af et tomt argument ""
betyder ikke at bruge en sikkerhedskopifil, hvilket synes at være det, du vil have.
Det samme i GNU (eller NetBSD, OpenBSD , busybox) implementering ville være:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Tak @bahamat og @Mikel og @ pieter-breed for at forbedre mit svar med dine kommentarer.
Kommentarer
- Hvad gør de krøllede seler?
- @ZaneHitchcox de krøllede seler er pladsholdere for det matchede filnavn
- hvad ' er
+
i slutningen? - @Anthony
+
i slutningen afslutter listen over argumenter for indstillingen-exec
. Det kræves af syntaksen for-exec
.
-exec
og alt efter det? Udskriver det navnene på Java-filerne? (Jeg ' er bekymret at du ' bruger smarte anførselstegn i stedet for ASCII-anførselstegn.)"
og'
.