GNU/Linux >> Linux Esercitazione >  >> Linux

Esiste un 'git sed' o equivalente?

Ecco una soluzione che combina quelle di Noufal e Claytontstanley ed evita di toccare file che non cambieranno.

Nel [alias] blocco del mio ~/.gitconfig file:

psed = !sh -c 'git grep --null --full-name --name-only --perl-regexp -e \"$1\" | xargs -0 perl -i -p -e \"s/$1/$2/g\"' -

Per utilizzare:

git psed old_method_name new_method_name

Grazie sia a Noufal che a Greg per i loro post. Ho combinato le loro soluzioni e ne ho trovato uno che utilizza git grep (più robusto di git ls-files per il mio repository, poiché sembra elencare solo i file che contengono il codice src effettivo, ad esempio non le cartelle del sottomodulo), e ha anche il vecchio nome del metodo e il nuovo nome del metodo in un solo posto:

Nel [alias] blocco del mio ~/.gitconfig file:

sed = ! git grep -z --full-name -l '.' | xargs -0 sed -i -e

Per utilizzare:

git sed 's/old-method-name/new-method-name/ig'

Potresti usare git ls-files in combinazione con xargs e sed :

git ls-files -z | xargs -0 sed -i -e 's/old-method-name/new-method-name/g'

Potresti fare un

for i in $(git grep --full-name -l old_method_name)
do
 perl -p -i -e 's/old_method_name/new_method_name/g' $i
done

inseriscilo in un file da qualche parte e poi alias come git sed nella tua configurazione.

Aggiornamento: Il commento di tchrist qui sotto è una soluzione molto migliore poiché impedisce a perl di generarsi ripetutamente.


Linux
  1. Esiste un equivalente di .Net FileSystemWatcher nel mondo Linux?

  2. windows equivalente di inet_aton

  3. comando fallocate() equivalente in OS X?

  4. Esiste un equivalente di wine per l'esecuzione di applicazioni Mac?

  5. Esiste un equivalente Linux di Programmer's Notepad o Notepad++

Come cambiare ramo su Git

Esercitazione avanzata su Git

Fedora - Esiste un servizio Ppa equivalente nel mondo Fedora?

Esiste un equivalente WinSCP per Linux?

C'è STDCALL in Linux?

Esiste un equivalente Windows del comando Unix strings?