Quiero saber cómo puedo encontrar y reemplazar un texto específico en varios archivos como en Notepad ++ en el tutorial vinculado.
por ejemplo: http://cybernetnews.com/find-replace-multiple-files/
Quiero saber cómo puedo encontrar y reemplazar un texto específico en varios archivos como en Notepad ++ en el tutorial vinculado.
por ejemplo: http://cybernetnews.com/find-replace-multiple-files/
Respuestas:
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 de forma recursiva desde el directorio de ejecución y opera solo en archivos normales, legibles y grabables:
find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
cyber net news
? ¿Cómo puedo convertir esto a cyber net
?
El editor de flujo, sed, es una poderosa utilidad para este tipo de trabajo y es mi primera opción, sin embargo, si desea hacer esto desde un editor de texto ordinario usando una aplicación nativa basada en Ubuntu, le sugiero que eche un vistazo a Jedit , Está disponible en los repositorios y puede instalarse escribiendo en su 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 presentará el siguiente diálogo:
Esto es similar al de Notepad ++ y hace lo mismo, creo que esto es lo que quieres.
sed
.
Otra opción de GUI es regexxer :
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 de texto antiguo y texto nuevo utilizando la barra invertida.
Consulte con Geany , es el reemplazo perfecto de NPP para Linux. Puedes hacer exactamente eso y puedes usar regex.
Escribí un pequeño guión solo para esta cosa. Si solo necesita lo básico y no está familiarizado con sed, etc., eche un vistazo aquí: http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in -a-conjunto-de-archivos /
El guión es el siguiente:
for f in submit_*;
do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
mv a_$f $f ;
done
Puede usar este script, copiar 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
Otro programa es Searchmonkey .
SearchMonkey es una aplicación Gtk liviana que tiene como objetivo reemplazar el engorroso hallazgo / grep con una interfaz de usuario ingeniosa 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 fácil de usar y accesible para usuarios finales y desarrolladores de software por igual.
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
funciona para mí en fedora
sed
instancias! Por lo tanto, es mucho más rápido en términos de tiempo de CPU. Debido a que el tiempo de acceso a los archivos sería limitado, creo que no es mucho más rápido en el tiempo del reloj, pero da una menor carga del sistema. Note xargs
colocará lotes, como hundereds, de nombres de archivo en la línea de comando de un solo sed
comando, llenando el tamaño del búfer disponible en función de la longitud de las rutas.
+
lugar de \;
adentro find
, ¿verdad?
xargs
, pero tienes razón; desde man find
: -exec command {} +
: ... The command line is built in much the same way that xargs...
. Me hace pensar en las líneas de comando de git filter-branch
...;)
Una solución muy simple: reemplazar en todos los *.txt
archivos en la carpeta string_1
con string_2
:
sed -i 's/string_1/string_2/g' *.txt
sed -i 's/string_1/string_2/g' $(grep -rEl 'string_1' ./)