sed: ¿cómo hacer varias sustituciones consecutivas pero procesar el archivo solo una vez?


31

Si estoy haciendo varias sustituciones que deben ser consecutivas, por ejemplo

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 

¿Hay una mejor manera de hacer esto que solo pasará por el archivo t1_spec.file una vez y hará las 4 sustituciones para cada línea en lugar de pasar por el archivo 4 veces?

Respuestas:


43

Además de usar punto y coma, también puedes dar más de una expresión a sed usando la -ebandera:

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

14

En GNU (p. Ej., En mi máquina Ubuntu), el simple uso de varias líneas es compatible y funciona bien y se ve bien (en mi humilde opinión) ya que evita las líneas súper largas, p. Ej.

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

5

Puede usar puntos y comas para separar las diferentes subtensiones entre las comillas simples o puede colocar todos esos comandos en un archivo y especificar el archivo con la -fopción sed.

Usar el archivo es particularmente útil si va a usar el mismo conjunto de sedcomandos una y otra vez. Solía ​​tener que lidiar con una fuente de datos sucia y terminé con el tiempo con un archivo de 88 líneas llamado massage.sedpara eliminar automáticamente la mayoría de los errores comunes que recibí de la fuente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.