Trova e sostituisci il testo in più file

71

Voglio sapere come posso trovare e sostituire un testo specifico in più file come in Notepad ++ nel tutorial collegato.

ad esempio: link

    
posta Faruk Uzun 30.11.2011 - 14:58

10 risposte

122

Qui uso sed per sostituire ogni occorrenza della parola "cybernetnews" con "cybernet" in ogni file con l'estensione, c, nella directory, / home / user / directory /.

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

Una variante più generica in cui si esegue una ricerca ricorsiva dalla directory di esecuzione e si opera solo su file regolari, leggibili e scrivibili:

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

L'editor di stream, sed, è una potente utility per questo tipo di lavoro ed è la mia prima scelta, tuttavia, se vuoi farlo da un normale editor di testo usando un'applicazione nativa basata su Ubuntu, ti suggerisco di prendere un guarda Jedit, è disponibile nei repository e può essere installato digitando nella tua console:

sudo apt-get install jedit

Avvia jedit, fai clic sulla voce del menu di ricerca, nell'elenco dei menu, fai clic sulla voce Cerca nella directory, ti verrà presentata la finestra di dialogo seguente:

Questo è simile a quello di Notepad ++ e fa la stessa cosa, credo che questo sia quello che vuoi.

    
risposta data Sabacon 30.11.2011 - 16:57
17

Un'altra opzione della GUI è regexxer :

    
risposta data int_ua 30.11.2011 - 18:26
13
perl -pi -e 's/oldtext/newtext/g' *

sostituisce qualsiasi occorrenza di testo vecchio da newtext in tutti i file nella cartella corrente. Tuttavia dovrai sfuggire a tutti i caratteri speciali perl all'interno di oldtext e newtext usando la barra rovesciata.

    
risposta data Michael K 30.11.2011 - 15:11
9

Verifica con Geany , è la perfetta sostituzione di NPP per Linux. Puoi fare esattamente quello in più puoi usare regex.

    
risposta data Stefano Mtangoo 30.11.2011 - 15:35
3

Ho scritto un piccolo script solo per questa cosa. Se hai solo bisogno delle basi e non hai familiarità con sed ecc, dai un'occhiata qui: link

Lo script è il seguente:

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

Puoi utilizzare questo script, copiare il codice e creare un file find_and_replace_in_files.sh .

L'ho modificato un po '; per favore dimmi la tua opinione.

# *****************************************************************************************
# 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
    
risposta data dimitrios 01.08.2012 - 17:36
2

Un altro programma è Searchmonkey .

  

SearchMonkey è un'applicazione Gtk leggera che mira a sostituire l'ingombrante find / grep con un'interfaccia utente scorrevole che fornisce rapidamente un mark-up che mostra le posizioni e la quantità di corrispondenze testuali. L'obiettivo è fornire uno strumento di ricerca semplice da usare e accessibile per gli utenti finali e gli sviluppatori di software.

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

lavora per me su fedora

    
risposta data user328359 19.09.2014 - 02:22
2

Una soluzione molto semplice: sostituisci tutti i file *.txt nella cartella string_1 con string_2 :

sed -i 's/string_1/string_2/g' *.txt
    
risposta data Helmut P. 25.04.2015 - 13:01

Leggi altre domande sui tag