Combinando due comandi sed

Ho un file r . Voglio sostituire le parole File e MINvac.pdb in esso con niente. I comandi che ho usato sono

 sed -i 's/File//g' /home/kanika/standard_minimizer_prosee/r 

e

 sed -i 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r 

Voglio combinare entrambi i comandi sed in uno solo, ma non conosco il modo. Qualcuno può aiutare?

Il file ha il seguente aspetto:

 -6174.27 File10MINvac.pdb -514.451 File11MINvac.pdb 4065.68 File12MINvac.pdb -4708.64 File13MINvac.pdb 6674.54 File14MINvac.pdb 8563.58 File15MINvac.pdb 

sed è un linguaggio di scripting. Separa i comandi con punto e virgola o newline. Molti dialetti sed ti permettono anche di passare ogni comando come argomento di opzione -e separato.

 sed -i 's/File//g;s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r 

Ho anche aggiunto una barra rovesciata per citare correttamente il punto letterale prima di pdb , ma in questo contesto limitato che probabilmente non è importante.

Per completezza, ecco la variante newline. Molti nuovi arrivati ​​sono sconcertati dal fatto che la shell consenta letterline nuove nelle stringhe tra virgolette, ma può essere conveniente.

 sed -i 's/File//g s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r 

Naturalmente, in questo caso limitato, puoi anche combinare tutto in una regex:

 sed -i 's/\(File\|MINvac\.pdb\)//g' /home/kanika/standard_minimizer_prosee/r 

(Alcuni dialetti sed vorranno questo senza barre rovesciate e / o offrono un’opzione per usare espressioni regolari estese, dove dovrebbero essere omessi. BSD sed , e quindi anche MacOS sed , richiede un argomento obbligatorio per sed -i che può tuttavia essere vuoto , come sed -i ''. )

Usa la bandiera -e :

 sed -i -e 's/File//g' -e 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r 

Una volta ottenuti più comandi di quelli che è conveniente definire con -e s, è meglio memorizzare i comandi in un file separato e includerli con l’ -f .

In questo caso, devi creare un file contenente:

 s/File//g s/MINvac.pdb//g 

Chiamiamo quel file “sedcommands”. Dovresti quindi usarlo con sed come questo:

 sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r 

Con solo due comandi, probabilmente non vale la pena usare un file separato di comandi, ma è molto conveniente se si hanno molte trasformazioni da fare.