sed - come eseguire diverse sostituzioni consecutive ma elaborare il file una sola volta?


31

Se sto effettuando diverse sostituzioni che devono essere consecutive, ad es

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb
sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb
sed -i 's/\.should/\.to/' t1_spec.rb 
sed -i 's/==/eq/' t1_spec.rb 

C'è un modo migliore per farlo che passerà attraverso il file t1_spec.file una sola volta e farà le 4 sostituzioni per ogni riga anziché passare attraverso il file 4 volte?

Risposte:


43

Oltre a utilizzare i punti e virgola, puoi anche dare più di un'espressione a sed usando il -eflag:

sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/'  t1_spec.rb 

14

In GNU (ad es. Sulla mia macchina Ubuntu), l'utilizzo di più linee è supportato e funziona bene e ha un bell'aspetto (imho) in quanto evita linee super lunghe, ad es.

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/
        /expect(browser.*\.should/s/\.should/).should/
        s/\.should/\.to/
        s/==/eq/' t1_spec.rb 

5

È possibile utilizzare i punti e virgola per separare le diverse sottostazioni tra virgolette singole oppure è possibile inserire tutti quei comandi in un file e specificare il file con l' -fopzione su sed.

L'uso del file è particolarmente utile se si intende utilizzare sempre lo stesso set di sedcomandi. Avevo a che fare con un feed di dati sporco e sono finito col tempo con un file di 88 righe chiamato massage.sedper cancellare automaticamente la maggior parte degli errori comuni che ho ricevuto dal feed.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.