Molte persone sanno come usare sed di base:

sed 's/hello/bonjour/' greetings.txt echo "hi there" | sed 's/hi/hello/' 

Che coprirà l ‘ 80% del tuo utilizzosed. Questo post riguarda l’altro 20%. Pensalo come un corso di follow-up dopo sed

In modo da poter cambiare i flussi tramite l’output delle tubazioni in sed. Cosa succede se si desidera modificareil file sul posto?

Sostituzione sul posto

sed viene fornito con il-i bandiera., Bisogna consultare man sed:

-i extension Edit files in-place, saving backups with the specified extension. 

provare:

si noti che i sistemi Linux, uno spazio dopo -i potrebbe causare un errore, così insteadof -i .bak puoi provare -i.bak.

Quindi il contenuto del file originale viene salvato in un nuovo file chiamato.bak,e la nuova versione modificata è nell’originalegreetings.txt. Ora tutto quello che dobbiamo fare è:

rm greetings.txt.bak 

E abbiamo cambiato il file sul posto., Ora sei il brindisi dell’ufficio, cantato dai bardi.

Prendiamo l33t

Aspetta, c’è di più in quella voceman persed -i:

If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc. 

Estensione a lunghezza zero, eh? Usiamo il nostro file originale greetings.txt prima di cambiarlo:

Il -i '' (o, in Linux, solo -i) dice a sed di usare uno zero-lengthextension per il backup., Un’estensione di lunghezza zero significa che il backup ha lo stesso nome del nuovo file, quindi non viene creato alcun nuovo file. Rimuove la necessità di eseguirerm dopo aver eseguito una sostituzione sul posto.

Non ho riscontrato problemi di spazio su disco con -i ''. Se sei preoccupato per l’avviso della pagina man, puoi usare la tecnica -i .bak che menziono nella sezione precedente.

Trova e sostituisci in più file

Ci piacesed così tanto che lo usiamo nel nostro scriptreplace., Funziona in questo modo:

replace foo bar **/*.rb 

Il primo argomento è la stringa che stiamo trovando. Il secondo è la stringa conche stiamo sostituendo. Il terzo è un modello che corrisponde all’elenco dei file all’internoche vogliamo limitare la nostra ricerca.