GNU/Linux >> Tutoriels Linux >  >> Linux

Existe-t-il un "git sed" ou équivalent ?

Voici une solution qui combine celles de Noufal et claytontstanley et évite de toucher à des fichiers qui ne changeront pas.

Dans le [alias] bloc de mon ~/.gitconfig fichier :

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

Pour utiliser :

git psed old_method_name new_method_name

Merci à Noufal et Greg pour leurs messages. J'ai combiné leurs solutions et en ai trouvé une qui utilise git grep (plus robuste que git ls-files pour mon référentiel, car il semble ne répertorier que les fichiers contenant le code src réel - pas les dossiers de sous-modules par exemple), et a également l'ancien nom de méthode et le nouveau nom de méthode en un seul endroit :

Dans le [alias] bloc de mon ~/.gitconfig fichier :

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

Pour utiliser :

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

Vous pouvez utiliser git ls-files en combinaison avec xargs et sed :

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

Vous pourriez faire 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

collez-le dans un fichier quelque part, puis aliasez-le en tant que git sed dans votre config.

Mise à jour : Le commentaire de tchrist ci-dessous est une bien meilleure solution car il empêche perl de se reproduire à plusieurs reprises.


Linux
  1. Mkdir récursif ?

  2. N Équivalent à Top Mais pour les E/S réseau ?

  3. Fedora – Existe-t-il un service Ppa équivalent dans le monde Fedora ?

  4. Unity équivalent à la fonctionnalité "commentaires" de Kde ?

  5. Existe-t-il STDCALL sous Linux ?

Comment changer de branche sur Git

Tutoriel Git avancé

Auto-complétion Git ?

Échapper à Blackslash dans Sed ?

Existe-t-il un équivalent WinSCP pour Linux ?

Existe-t-il un équivalent de cd - pour cp ou mv ?