función bash para reemplazar cada aparición de texto en el directorio y subdirectorios

función bash para reemplazar cada aparición de texto en el directorio y subdirectorios

Encontré (en Google) esta línea que funciona perfectamente para reemplazar todas las apariciones en todos los archivos de mi directorio y subdirectorios:

grep -lr previoustext | xargs sed -i 's/previoustext/newtext/g'

Funciona muy bien.

Pero ahora estoy intentando usarlo en una función en mi bash_aliasesarchivo de la siguiente manera:

freplace() {
    grep -lr previoustext | xargs sed -i 's/previoustext/newtext/g';
}

Sin embargo, cuando llamo

freplace previoustext newtext

en mi terminal no pasa nada…. El texto no se reemplaza.

¿Alguna idea de por qué no funciona?

Respuesta1

Si desea pasar argumentos a una función, debe utilizar parámetros posicionales para seleccionarlos.

freplace() {
    grep -lr "$1" | xargs sed -i "s/$1/$2/g"
}

Tenga en cuenta que no funciona para cadenas que contienen /u otros caracteres especiales para sed.

información relacionada