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

  • Je to přesně to, co ' re běží? Co když odstraníte -exec a všechno po něm? Vytiskne názvy souborů Java? (< „0ad54b5172″>

mám obavy že ' používáte místo uvozovek ASCII chytré uvozovky.)

  • Vlastně to to řeší, alespoň pro mě. Měly by se nahradit dvojité i jednoduché uvozovky autor " a '.
  • Sm art (?) uvozovky! .. 🙂
  • To, co jsem vložil, bylo přesně to, co jsem běžel. Může někdo zveřejnit odpověď?
  • Až příště odešlete chybovou zprávu, která se vám zobrazí, když položíte otázku. Ušetří to čas všem.
  • 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.

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *