2011-10-05 10 views
22

Tengo un archivo r. Quiero reemplazar las palabras File y MINvac.pdb sin nada. El comando que utiliza es:combinando 2 comandos sed

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

y

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

quiero combinar ambos sed comandos en uno, pero no sé el camino. ¿Alguien puede ayudar?

El archivo se ve así:

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

Respuesta

41

sed es un lenguaje de script. Separe los comandos con punto y coma o línea nueva. Muchos dialectos sed también le permiten pasar cada comando como un argumento de opción -e por separado.

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

También he añadido una barra invertida para citar correctamente el punto literal antes pdb, pero en este contexto limitado que es probablemente poco importante.

Para completar, aquí está la variante de nueva línea. Muchos recién llegados están desconcertados de que el shell permita nuevas líneas literales en cadenas entrecomilladas, pero puede ser conveniente.

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

Por supuesto, en este caso limitada, se puede también combinar todo en una sola expresión regular:

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

(Algunos sed dialectos querrán esto sin barras invertidas, y/o ofrecer una opción para un uso prolongado expresiones regulares, donde deben ser omitidos. sed BSD, MacOS y por lo tanto también sed, exige un argumento obligatorio a sed -i sin embargo, que puede ser vacía, como sed -i ''.)

+0

gracias ... Esto funcionó muy bien .. – kanika

+0

Gracias por el consejo sobre el uso de varios indicadores -e, uno por declaración en el script. Tener un distintivo -e independiente para el comando 'i' es una buena manera de asegurarse de que el comando 'i' finaliza al escribir un guión sed de oneliner. – IllvilJa

19

Use la bandera -e:

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

Una vez que obtenga más comandos que son convenientes para definir con -e s, es mejor almacenar los comandos en un archivo separado e incluirlo con la bandera -f.

En este caso, sería un archivo que contiene:

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

Vamos a llamar a ese archivo '' sedcommands. A continuación, tendría que utilizar con sed de esta manera:

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

Con sólo dos comandos, es probable que no vale la pena usar un archivo separado de comandos, pero es muy conveniente si usted tiene una gran cantidad de transformaciones a realizar.

+0

¿Qué es la bandera idead detrás de -f? – kanika

+2

Sin duda trató de explicarlo. Con '-f' puedes poner tu script en un archivo en lugar de en la línea de comando' sed'.(En este caso, probablemente no sea muy útil, sin embargo). – tripleee