Combinando dos comandos sed
Tengo un archivo r
. Quiero reemplazar las palabras File
y MINvac.pdb
con 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 sed
comandos 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
sed
es un lenguaje de scripting. Los comandos se separan con punto y coma o nueva línea. Muchos sed
dialectos también le permiten pasar cada comando como un -e
argumento 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 sed
dialectos 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 -i
sin embargo, puede estar vacío, como sed -i ''.
)
Usa la -e
bandera:
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 -e
s, es mejor almacenar los comandos en un archivo separado e incluirlo con la -f
bandera.
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.