web-dev-qa-db-fra.com

Rechercher et remplacer du texte dans plusieurs fichiers

Je veux savoir comment je peux trouver et remplacer un texte spécifique dans plusieurs fichiers, comme dans Notepad ++ dans le tutoriel lié.

exemple: http://cybernetnews.com/find-replace-multiple-files/

78
Faruk Uzun

Ici, j’utilise sed pour remplacer chaque occurrence du mot "cybernetnews" par "cybernet" dans chaque fichier portant l’extension c dans le répertoire/home/user/directory /.

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

Une variante plus générique dans laquelle vous effectuez une recherche récursive dans le répertoire d'exécution et ne travaillez que sur des fichiers normaux, lisibles et inscriptibles:

find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
130
user8290

L'éditeur de flux, sed, est un utilitaire puissant pour ce type de travail. C'est mon premier choix. Toutefois, si vous souhaitez utiliser un éditeur de texte ordinaire utilisant une application native basée sur Ubuntu, je vous suggère de jeter un coup d'œil à Jedit. , Il est disponible dans les référentiels et peut être installé en tapant dans votre console:

Sudo apt-get install jedit

Lancez jedit, cliquez sur l'élément de menu de recherche, dans la liste des menus, cliquez sur l'élément de recherche dans le répertoire. La boîte de dialogue ci-dessous s'affichera:

Jedit Search In Folder Dialog

Ceci est similaire à celui de Notepad ++ et fait la même chose, je crois que c'est ce que vous voulez.

27
Sabacon

Une autre option de l'interface graphique est regexxerregexxer screenshot

19
int_ua
Perl -pi -e 's/oldtext/newtext/g' *

remplace toute occurrence de oldtext par newtext dans tous les fichiers du dossier en cours. Cependant, vous devrez échapper à tous les caractères spéciaux Perl dans oldtext et newtext en utilisant la barre oblique inversée.

13
Michael K

Vérifiez avec Geany , c’est le remplacement parfait de NPP pour Linux. Vous pouvez faire exactement cela, plus vous pouvez utiliser regex.

9
Stefano Mtangoo

J'ai écrit un petit script pour cette chose. Si vous avez seulement besoin des bases et que vous n'êtes pas familiarisé avec sed, etc., jetez un œil ici: http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and -replace-in-a-set-of-files /

Le script est le suivant:

for f in submit_*;
  do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
  mv a_$f $f ;
done
3
recluze
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

travaille pour moi sur Fedora

2
user328359

Vous pouvez utiliser ce script, copier du code et créer un fichier find_and_replace_in_files.sh.

Je l'ai un peu modifié; s'il vous plaît dites-moi votre opinion.

# *****************************************************************************************
# 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
2
dimitrios

Une solution très simple: remplacez dans tous les *.txts du dossier string_1 par string_2:

sed -i 's/string_1/string_2/g' *.txt
2
Helmut P.

Un autre programme est Searchmonkey .

SearchMonkey est une application Gtk légère qui vise à remplacer le fastidieux find/grep par une interface utilisateur élégante qui fournit rapidement une annotation indiquant les emplacements et le nombre de correspondances de texte. L'objectif est de fournir un outil de recherche simple à utiliser et accessible aux utilisateurs finaux et aux développeurs de logiciels.

2
vrcmr