2012-08-13 10 views

Respuesta

23

la versión de OS X de sed qué apoyan -i, pero requiere un argumento para decirle qué extensión de archivo que desea utilizar para el archivo de copia de seguridad (o "" de ninguna copia de seguridad). Por cierto, quiere grep -l para obtener solo los nombres de los archivos.

grep -l '/static' dir/* | xargs sed -i "" 's/\/static//g' 
+0

¡Funcionó! No estaba dando una extensión para el archivo de copia de seguridad. Trowing eso allí lo hizo funcionar. Esto es definitivamente más fácil de recordar que pasar por un bucle for. ¡Gracias! – davierc

3

Uso Perl:

$ perl -pi.bak -e '[email protected]/[email protected]@g' dir/* 
+0

Estaba esperando una respuesta usando grep y sed ya que no conozco ni una pizca de perl. Gracias por la respuesta. – davierc

+0

En este escenario limitado, Perl es bastante similar a 'sed'. Puede convertir scripts 'sed' simples en Perl con la herramienta' s2p'. – tripleee

1

Usted puede hacer esto mediante un bucle :

for file in $(grep -l '/static' dir/*) ; do 
    sed 's/\/static//g' $file > $file.$$ && mv $file.$$ $file 
done 

utilizo el sufijo .$$ ($$ es el identificador de proceso de la Shel actual l) para evitar colisiones con nombres de archivos existentes, y && en lugar de ; para evitar dañar el archivo de entrada si el comando sed falla por alguna razón. También agregué -l para que grep imprima nombres de archivo en lugar de líneas coincidentes.

O puede instalar GNU sed (no estoy seguro de cómo hacerlo exactamente en OSX).

+0

¿No debería el comando 'grep' imprimir nombres de archivo en lugar de líneas con coincidencias, como' $ (grep --files-con-coincidencias '/ static' dir/*) '? – Birei

+0

@Birei: Muy bien (copié el comando grep de la pregunta, debería haber verificado más cuidadosamente). Respuesta actualizada –

+0

Gracias por el consejo sobre el uso. $$. Esto funciona perfectamente, y después de seguir leyendo lo entiendo completamente. Maldita sea, no hay trabajo en el que pueda usar el delineador simple. – davierc

Cuestiones relacionadas