Qual è lo strumento migliore per trovare e sostituire espressioni regolari su più file?

StackOverflow https://stackoverflow.com/questions/102083

  •  01-07-2019
  •  | 
  •  

Domanda

Preferibilmente strumenti gratuiti, se possibile.

Inoltre, la possibilità di cercare più espressioni regolari e ciascuna di sostituirla con stringhe diverse sarebbe un bonus.

È stato utile?

Soluzione

Perl. Seriamente, rende le cose di amministratore di sistema molto più facili. Ecco un esempio:

perl -pi -e 's / qualcosa / qualcosa / g' * .log

Altri suggerimenti

sed è semplice e veloce:

sed -e "s/pattern/result/" <file list>

puoi anche unirti ad esso con find:

find <other find args> -exec sed -e "s/pattern/result/" "{}" ";"

Textpad fa un buon lavoro su Windows. Ed è anche un ottimo editor.

Ho scritto uno strumento da riga di comando gratuito per Windows per farlo. Si chiama rxrepl , supporta la ricerca di Unicode e file. Alcuni potrebbero trovarlo utile.

Non sorprende che Perl faccia un ottimo lavoro nel gestirlo, insieme a una shell decente:

for file in @filelist ; do
  perl -p -i -e "s/pattern/result/g" $file
done

Questo ha lo stesso effetto (ma è più efficiente e senza le condizioni di gara) di:

for file in @filelist ; do
  cat $file | sed "s/pattern/result/" > /tmp/newfile
  mv /tmp/newfile $file
done

L'editor di directory di Emacs ha la funzione `dired-do-query-replace-regexp 'per cercare e sostituire un regexp su una serie di file contrassegnati.

In Windows, mi piaceva WinGrep

In Ubuntu, utilizzo Regexxer.

Per trovare e sostituire più file su Windows ho trovato molto utile rxFind .

Per Mac OS X, TextWrangler fa il lavoro.

Il mio preferito è PowerGrep di JGSoft. Si interfaccia con RegexBuddy che può aiutarti a creare e testare l'espressione regolare, esegue automaticamente il backup di tutte le modifiche (e fornisce funzionalità di annullamento), offre la possibilità di analizzare più directory (con modelli di nome file) e supporta persino formati di file come Microsoft Word, Excel e PDF.

Schermata di PowerGrep

Vorrei bash + find + sed.

Vim per il salvataggio (e presidente ;-)). Prova:

vim -c "argdo! s:foo:bar:gci" <list_of_files>

(Adoro l'interruttore -c di Vim, è magico. O se avevi già in Vim e aperto i file, ad esempio:

vim <list_of_files>

Emetti solo:

:bufdo! s:foo:bar:gci

Ovviamente sed e perl è anche capace. HTH.

Ho il lusso di Unix e Ubuntu; In entrambi, uso gawk per tutto ciò che richiede la ricerca e la sostituzione riga per riga, in particolare per riga per riga per sottostringa. Recentemente, questo è stato il più veloce per l'elaborazione di 1100 modifiche rispetto a milioni di righe in centinaia di file (una directory) Su Ubuntu sono un fan di regexxer

 sudo apt-get install regexxer

In Windows esiste un'alternativa gratuita che funziona al meglio: Notepad ++

Vai a " Cerca " - > " Trova in File " ;. Si può dare directory, pattern di file, impostare espressioni regolari, quindi visualizzare in anteprima le corrispondenze e infine sostituire tutti i file in modo ricorsivo.

Adoro questo strumento:

http://www.abareplace.com/

Ti dà un " mentre digiti " anteprima della tua espressione regolare ... FANTASTICO per chi non è esperto in RE ... ed è super veloce nel cambiare centinaia o migliaia di file alla volta ...

E poi ti ANNULLA anche le tue modifiche ...

Molto bello ...

Patrick Steil - http://www.podiotools.com

se "textpad" è una risposta valida, suggerirei Sublime Text a mani basse.

Le modifiche multi-cursore sono un modo ancora più efficiente per effettuare sostituzioni in generale, ma la sua " Trova nei file " è il livello più alto per regex in blocco / sostituzioni semplici da trovare.

la ricerca regex di jEdit e la sostituzione nei file è abbastanza decente. Leggermente eccessivo se lo usi solo per quello, però. Inoltre, non supporta la sostituzione multi-espressione richiesta.

Ho trovato utile lo strumento RxFind (OSS gratuito).

Parentesi (codice sorgente, deb / Ubuntu, OSx e Windows) ha una buona visualizzazione dei risultati, che consente di selezionarli singolarmente applicare la sostituzione. Puoi effettuare ricerche in base al testo standard, con distinzione tra maiuscole e minuscole e regex. Molto importante: è possibile escludere modelli di file e directory nella ricerca.

Da almeno 25 anni utilizzo Emacs per sostituzioni su larga scala su un gran numero di file. Esegui etags per specificare qualsiasi set di file da cercare:

$ etags file1.txt file2.md dir1/*.yml dir2/*.json dir3/*.md

Quindi apri Emacs ed esegui tag-query-replace , che richiede regex e sostituzione:

\b\(foo\)\b
\1bar
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top