2010-03-31 18 views
7

Quiero buscar recursivamente a través de un directorio de archivos de texto y reemplazar cada aparición de foo dentro de los archivos con bar. ¿Cuál es la forma más fácil de lograr esto?¿La forma más fácil de encontrar y reemplazar recursivamente?

Imagino que grep haría el trabajo en una línea, pero parece que no puedo encontrar un ejemplo de esto.

estoy trabajando en OS X.

+0

¿Estás hablando de foo ** ** en los nombres de archivos o foo dentro de los propios archivos? – Robusto

+0

Lo siento, se aclaró. Dentro de los archivos por favor. –

+0

Pertenece a superuser.com –

Respuesta

10

GNU encontrar

find /path -type f -iname "*.txt" -exec sed -i.bak 's/foo/bar/g' "{}" +; 
3

grep sólo se utiliza para encontrar cosas, no para modificarlos.

Para modificaciones con una interfaz tipo grep, normalmente usaría sed. Por sí solo, sed no admite ningún tipo de recursión, solo funciona en un archivo a la vez. Para agregar eso, normalmente usa find para encontrar los archivos que contienen el patrón deseado, luego haga que invoque sed para modificar el archivo.

0

Hay un buen editor de texto libre que hará este tipo de cosas simple y fácilmente: TextWrangler.

+0

Cool. ¿Cómo lo instalo en mi servidor? –

+0

Suponiendo que es un servidor OS X, simplemente descárguelo e instálelo de la forma habitual. Si no tiene cabeza, entonces use VNC o Escritorio remoto. Por supuesto, puede que ni siquiera necesite instalarlo en el servidor: si está utilizando una máquina OS X localmente y está montando sistemas de archivos desde su servidor, puede instalar TextWrangler localmente y buscar y reemplazar desde su máquina local en el servidor. red. –

2

zsh

sed -i 's/foo/bar/g' **/*.txt 
+0

Me sale 'sed: 1:" **/*. Txt ": código de comando inválido *'. –

+0

Lo estás haciendo mal. Y/o no en zsh. – wRAR

+0

cómo escaparse '/' si foo y bar son rutas? – rraallvv

Cuestiones relacionadas