Combinando dos comandos sed

Resuelto kanika asked hace 13 años • 2 respuestas

Tengo un archivo r. Quiero reemplazar las palabras Filey MINvac.pdbcon nada. Los comandos que utilicé son

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 sedcomandos en uno, pero no sé la manera. ¿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
kanika avatar Oct 05 '11 13:10 kanika
Aceptado

sedes un lenguaje de scripting. Los comandos se separan con punto y coma o nueva línea. Muchos seddialectos también le permiten pasar cada comando como un -eargumento de opción independiente.

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

También agregué una barra invertida para citar correctamente el punto literal antes pdb, pero en este contexto limitado eso probablemente no sea 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 entre comillas, pero puede ser conveniente.

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

Por supuesto, en este caso limitado, también puedes combinar todo en una sola expresión regular:

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

(Algunos seddialectos querrán esto sin barras invertidas y/u ofrecerán una opción para usar expresiones regulares extendidas, donde deberían omitirse. BSD sed, y por lo tanto también MacOS sed, exige un argumento obligatorio que, sed -isin embargo, puede estar vacío, como sed -i ''.)

tripleee avatar Oct 05 '2011 06:10 tripleee

Usa la -ebandera:

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

Una vez que obtenga más comandos de los que es conveniente definir con -es, es mejor almacenar los comandos en un archivo separado e incluirlo con la -fbandera.

En este caso, crearías un archivo que contenga:

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

Llamemos a ese archivo 'sedcommands'. Luego lo usarías con sed así:

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

Con sólo dos comandos, probablemente no valga la pena usar un archivo de comandos separado, pero es bastante conveniente si tienes que realizar muchas transformaciones.

Michael J. Barber avatar Oct 05 '2011 06:10 Michael J. Barber