Commenti
- tldp.org/LDP/abs/html/x23170.html
- grymoire.com/Unix/Sed.html
- Non deve essere contrassegnato come duplicato perché laltra risposta a cui si fa riferimento non ' ti mostra come sostituire su un singolo file, mentre questa risposta lo fa. O quello o integra questa risposta in quella
Risposta
sed
è il s tream ed itor , in quanto puoi utilizzare |
(pipe) per inviare stream standard (in particolare STDIN e STDOUT) tramite sed
e le altera programmaticamente al volo, rendendolo uno strumento utile nella tradizione della filosofia Unix; ma puoi anche modificare i file direttamente, utilizzando il parametro -i
indicato di seguito.
Considera quanto segue :
sed -i -e "s/few/asd/g" hello.txt
s/
viene utilizzato per s sostituire lespressione trovata few
con asd
:
I pochi, i coraggiosi.
Lasd , il coraggioso.
/g
sta per “global”, che significa farlo per lintera linea. Se lasci /g
(con s/few/asd/
, devono essere sempre presenti tre barre, indipendentemente da cosa accada) e few
appare due volte sulla stessa riga, solo il primo few
viene modificato in asd
:
I pochi uomini, le poche donne, i coraggiosi.
Gli uomini asd, le poche donne, i coraggiosi.
Ciòèutile in alcune circostanze, come lalterazione di caratteri speciali allinizio delle righe (ad esempio, la sostituzione dei simboli di maggiore che alcune persone usano per citare materiale precedente nei thread di posta con una tabulazione orizzontale lasciando invariata una disuguaglianza algebrica quotata più avanti nella riga), ma nel tuo esempio in cui specifichi che ovunque few
dovrebbe essere sostituito , assicurati di avere /g
.
Le seguenti due opzioni (flag) sono combinate in una, :
-i
opzione viene utilizzata per modificare i n posto nel file hello.txt
.
-e
opzione indica e xpression / comando da eseguire, in questo caso s/
.
Nota: è importante utilizzare -i -e
per cercare / sostituire. Se fai -ie
, crei un backup di ogni file con la lettera “e” aggiunta.
Commenti
- Io ' uso OS X, per quello che vale ', ma questo è lerrore che ottengo: sed: 1: " hello.txt ": codice comando non valido.
- È stata proposta una modifica per aggiungere il -e flag a sed. Il flag -e è facoltativo fintanto che il comando da eseguire appare per primo, non cè un file di comando e un comando arg, e cè un solo comando.
- @roo su mac os x, usando
-ie
Ho ricevuto che il filefoo
è stato sottoposto a backup comefooe
. - questo comando mi fornisce un file aggiuntivo che termina con -e, perché ??: index.html-e sed -i -e ' s / n / d / g ' index.html
- Su Mac, -i -e crea un nuovo file con -e aggiunto al nome. Sembra funzionare in bash: sed " -i " " " " -e " " s / pochi / asd / g " " somefile.xml "
Risposta
sed -i "s/fea/asd/g" hello.txt
g: Globale
s: sostituto
-i : realtime funziona con il file inplace
Commenti
- Quando si tratta di collegamenti simbolici, è bene aggiungere
--follow-symlinks
altrimenti-i
trasformerà il link simbolico in una copia (modificata) del file.