it-swarm.it

Usando 'sed' per trovare e sostituire

So che a questa domanda probabilmente è stata già data una risposta. Ho visto molte discussioni su questo in vari posti, ma le risposte sono generalmente difficili da estrarre per me. Sto cercando aiuto con un esempio di utilizzo del comando 'sed'.

Supponiamo di voler agire sul file "hello.txt" (nella stessa directory di Prompt). Ovunque contenesse la frase "pochi", dovrebbe essere cambiato in "asd". Come sarebbe il comando?

338
roo

sed è il s tream ed itor , in quanto puoi utilizzare | (pipe) per inviare stream standard (in particolare STDIN e STDOUT) attraverso sed e modificarli al volo programmandolo, rendendolo uno strumento utile nella tradizione della filosofia Unix; ma può anche modificare i file direttamente, usando -i parametro menzionato di seguito.
Considera quanto segue :

sed -i -e 's/few/asd/g' hello.txt

s/ è usato per s sostituisce l'espressione trovata few con asd:

I pochi, i coraggiosi.


Il asd, il coraggioso.

/g sta per "globale", nel senso che lo fa per l'intera linea. Se lasci il /g (con s/few/asd/, ci devono sempre essere tre barre a prescindere) e few appare due volte sulla stessa riga, solo il primo few viene cambiato in asd:

I pochi uomini, le poche donne, i coraggiosi.


Gli uomini asd, le poche donne, i coraggiosi.

Ciò è utile in alcune circostanze, come la modifica di caratteri speciali all'inizio delle righe (ad esempio, la sostituzione dei simboli maggiore di quelli che alcune persone usano per citare il materiale precedente nei thread di posta elettronica con una scheda orizzontale lasciando una disuguaglianza algebrica citata più avanti nella riga intatto), ma nel tuo esempio in cui specifichi che ovunquefew si verifica, deve essere sostituito, assicurati di avere /g.

Le seguenti due opzioni (flag) sono combinate in una, -ie:

-i L'opzione è usata per modificare i n posto sul file hello.txt.

-e opzione indica la e xpression/comando da eseguire, in questo caso s/.

Nota: è importante utilizzare -i -e per cercare/sostituire. Se fate -ie, crei un backup di ogni file con la lettera 'e' allegata.

630
sed -i 's/fea/asd/g'  hello.txt

g: Globale

s: sostituto

- i: in tempo reale funziona con il file inplace

75
PersianGulf