Sto utilizzando il seguente comando sul mio Mac:
$find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \;
e sembra non avere alcun effetto.
Ho due file nella directory che terminano con .java, entrambi con foo testo al loro interno. Mi manca qualcosa?
EDIT: Risultati dalla richiesta di commenti
[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 .
Commenti
Rispondi
Prima di tutto, assicurati di “utilizzare ascii regolari virgolette come "
e "
(codici ascii 0x22
e 0x27
, rispettivamente) negli script di shell, perché lesempio nel tuo post contiene virgolette non standard. Se guardi da vicino, hanno un aspetto leggermente diverso. Molto probabilmente questo è un errore di copia-incolla da un documento di testo RT formato come Word, OOWriter o anche una finestra del browser.
Dato che sei su un Mac, molto probabilmente hai limplementazione di FreeBSD di sed
, in cui caso devi scrivere il comando in questo modo:
find . -name "*.java" -exec sed -i "" s/foo/bar/g {} +
(qui usando +
invece di \;
per evitare di eseguire una sed
invocazione per file).
Nellimplementazione di FreeBSD di sed
flag richiede un argomento: lestensione di un file di backup. Ad esempio con -i .bak
il comando eseguirà il backup di file1.txt
come file1.txt.bak
prima di eseguire la sostituzione in il file originale. Usare un argomento vuoto ""
significa non usare un file di backup, che sembra essere quello che vuoi.
La stessa cosa in GNU (o NetBSD, OpenBSD , busybox) sarebbe:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Grazie @bahamat e @Mikel e @ pieter-breed per aver migliorato la mia risposta con i tuoi commenti.
Commenti
- Cosa fanno le parentesi graffe?
- @ZaneHitchcox le parentesi graffe sono segnaposto per il nome del file corrispondente
- cosa ' è il
+
fare alla fine? - @Anthony the
+
alla fine termina lelenco degli argomenti dellopzione-exec
. È richiesto dalla sintassi di-exec
.
-exec
e tutto ciò che segue? Stampa i nomi dei file Java? (' sono preoccupato che ' stai usando virgolette intelligenti invece di virgolette ASCII.)"
e'
.