Rechercher et remplacer du texte dans plusieurs fichiers

70

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

ex .: lien

    
posée Faruk Uzun 30.11.2011 - 14:58
la source

10 réponses

119

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

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

Variante plus générique où vous effectuez une recherche récursive à partir du répertoire d’exécution et opérez uniquement sur des fichiers normaux, lisibles et inscriptibles:

find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
    
réponse donnée user8290 30.11.2011 - 15:15
la source
26

L'éditeur de flux, sed, est un utilitaire puissant pour ce type de travail et est mon premier choix, cependant, si vous voulez le faire à partir d'un éditeur de texte ordinaire utilisant une application native basée sur Ubuntu, regardez 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 du menu, cliquez sur l'élément Rechercher dans l'annuaire. La boîte de dialogue suivante apparaîtra:

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

    
réponse donnée Sabacon 30.11.2011 - 16:57
la source
17

Une autre option de l'interface graphique est regexxer :

    
réponse donnée int_ua 30.11.2011 - 18:26
la source
12
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 inverse.

    
réponse donnée Michael K 30.11.2011 - 15:11
la source
9

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

    
réponse donnée Stefano Mtangoo 30.11.2011 - 15:35
la source
3

J'ai écrit un petit script pour cette chose. Si vous n'avez besoin que des bases et que vous ne connaissez pas sed, jetez un coup d’œil ici: lien

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
    
réponse donnée recluze 02.12.2011 - 03:09
la source
2

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
    
réponse donnée dimitrios 01.08.2012 - 17:36
la source
2

Un autre programme est Searchmonkey .

  

SearchMonkey est une application Gtk légère qui vise à remplacer le find / grep encombrant par une interface utilisateur sophistiquée qui fournit rapidement un balisage indiquant les emplacements et la quantité de correspondances de texte. L'objectif est de fournir un outil de recherche simple d'utilisation et accessible aux utilisateurs finaux et aux développeurs de logiciels.

    
réponse donnée vrcmr 14.09.2012 - 23:44
la source
2
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

travaille pour moi sur fedora

    
réponse donnée user328359 19.09.2014 - 02:22
la source
2

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

sed -i 's/string_1/string_2/g' *.txt
    
réponse donnée Helmut P. 25.04.2015 - 13:01
la source

Lire d'autres questions sur les étiquettes