Buscar y reemplazar texto dentro de varios archivos

73

Quiero saber cómo puedo encontrar y reemplazar un texto específico en varios archivos como en Notepad ++ en el tutorial vinculado.

p. ej .: enlace

    
pregunta Faruk Uzun 30.11.2011 - 14:58

10 respuestas

124

Aquí uso sed para reemplazar cada aparición de la palabra "cybernetnews" con "cybernet" en cada archivo con la extensión, c, en el directorio, / home / user / directory /.

find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

Una variación más genérica en la que busca recursivamente desde el directorio de ejecución y opera solo en archivos normales, legibles y que se pueden escribir:

find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
    
respondido por el user8290 30.11.2011 - 15:15
26

El editor de flujo, sed, es una poderosa utilidad para este tipo de trabajo y es mi primera opción, sin embargo, si quiere hacer esto desde un editor de texto ordinario usando una aplicación nativa basada en Ubuntu, le sugiero que tome una mira Jedit, está disponible en los repositorios y se puede instalar escribiendo en tu consola:

sudo apt-get install jedit

Inicie jedit, haga clic en el elemento del menú de búsqueda, en la lista del menú, haga clic en el elemento Buscar en el directorio, se le mostrará el siguiente cuadro de diálogo:

Esto es similar al de Notepad ++ y hace lo mismo, creo que esto es lo que quieres.

    
respondido por el Sabacon 30.11.2011 - 16:57
17

Otra opción de la GUI es regexxer :

    
respondido por el int_ua 30.11.2011 - 18:26
13
perl -pi -e 's/oldtext/newtext/g' *

reemplaza cualquier aparición de texto antiguo por texto nuevo en todos los archivos de la carpeta actual. Sin embargo, tendrá que escapar de todos los caracteres especiales de Perl dentro del texto antiguo y el nuevo texto usando la barra diagonal inversa.

    
respondido por el Michael K 30.11.2011 - 15:11
9

Consulte con Geany , es el reemplazo perfecto de NPP para Linux. Puede hacer exactamente eso además de que puede usar expresiones regulares.

    
respondido por el Stefano Mtangoo 30.11.2011 - 15:35
3

Escribí un pequeño guión solo por esto. Si solo necesita lo básico y no está familiarizado con sed, consulte aquí: enlace

El script es el siguiente:

for f in submit_*;
  do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
  mv a_$f $f ;
done
    
respondido por el recluze 02.12.2011 - 03:09
2

Puede usar este script, copiar el código y crear un archivo find_and_replace_in_files.sh .

Lo he modificado un poco; por favor dime tu opinión.

# *****************************************************************************************
# find_and_replace_in_files.sh
# This script does a recursive, case sensitive directory search and replace of files
# To make a case insensitive search replace, use the -i switch in the grep call
# uses a startdirectory parameter so that you can run it outside of specified directory - else this script will modify itself!
# *****************************************************************************************

!/bin/bash
# **************** Change Variables Here ************
startdirectory="/your/start/directory"
searchterm="test"
replaceterm="test=ok!"
# **********************************************************

echo "***************************************************"
echo "* Search and Replace in Files Version 01-Aug-2012 *"
echo "***************************************************"

i=0; 

  for file in $(grep -l -R $searchterm $startdirectory)
    do
      cp $file $file.bak
      sed -e "s/$searchterm/$replaceterm/ig" $file > tempfile.tmp
      mv tempfile.tmp $file

    let i++;

      echo "Modified: " $file
    done

echo " *** All Done! *** Modified files:" $i
    
respondido por el dimitrios 01.08.2012 - 17:36
2

Otro programa es Searchmonkey .

  

SearchMonkey es una aplicación Gtk liviana que tiene como objetivo reemplazar el engorroso find / grep con una interfaz de usuario sofisticada que proporciona rápidamente un marcado que muestra las ubicaciones y la cantidad de coincidencias de texto. El objetivo es proporcionar una herramienta de búsqueda simple de usar y accesible tanto para los usuarios finales como para los desarrolladores de software.

    
respondido por el vrcmr 14.09.2012 - 23:44
2
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

funciona para mí en fedora

    
respondido por el user328359 19.09.2014 - 02:22
2

Una solución muy simple: reemplace en todos los archivos *.txt en la carpeta string_1 con string_2 :

sed -i 's/string_1/string_2/g' *.txt
    
respondido por el Helmut P. 25.04.2015 - 13:01

Lea otras preguntas en las etiquetas