Na mém počítači používám následující příkaz:
$find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \;
a zdá se, že to nemá žádný účinek.
Mám dva soubory v adresáři, které končí v .java, oba mají foo text v nich. Chybí mi něco?
EDIT: Výsledky z požadavku komentářů
[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 .
Komentáře
mám obavy že ' používáte místo uvozovek ASCII chytré uvozovky.)
"
a '
. Odpovědět
Nejprve se ujistěte, že používáte běžný ascii citace jako "
a "
(kódy ASCII 0x22
a 0x27
) ve skriptech prostředí, protože příklad ve vašem příspěvku obsahuje nestandardní znaky uvozovek. Pokud se podíváte pozorně, vypadají trochu jinak. S největší pravděpodobností se jedná o chybu kopírování a vložení z dokumentu ve formátu RTF formát jako Word, OOWriter nebo dokonce okno prohlížeče.
Protože používáte Mac, pravděpodobně máte implementaci FreeBSD sed
, ve které v případě, že musíte příkaz napsat tímto způsobem:
find . -name "*.java" -exec sed -i "" s/foo/bar/g {} +
(zde místo iv id = použijte +
„00a3d0c9c2″>
aby se zabránilo spuštění jedné sed
vyvolání na soubor).
V implementaci FreeBSD sed
the vyžaduje argument: příponu záložního souboru. Například s -i .bak
by příkaz nejprve provedl zálohu file1.txt
jako file1.txt.bak
původní soubor. Použití prázdného argumentu ""
znamená nepoužívat záložní soubor, který se zdá být takový, jaký chcete.
Totéž v GNU (nebo NetBSD, OpenBSD) , busybox) implementace by byla:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Děkuji @bahamat a @Mikel a @ pieter-plemeno za zlepšení odpovědi pomocí vašich komentářů.
Komentáře
- Co dělají složené závorky?
- @ZaneHitchcox složené závorky jsou zástupnými symboly pro shodný název souboru
- co ' je to
+
na konci? - @Anthony
+
na konci ukončí seznam argumentů možnosti-exec
. Vyžaduje to syntaxe-exec
.
-exec
a všechno po něm? Vytiskne názvy souborů Java? (<