GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gibt es ein 'git sed' oder ein Äquivalent?

Hier ist eine Lösung, die die von Noufal und Claytontstanley kombiniert und es vermeidet, Dateien zu berühren, die sich nicht ändern.

Im [alias] Block meiner ~/.gitconfig Datei:

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

Zu verwenden:

git psed old_method_name new_method_name

Danke an Noufal und Greg für ihre Beiträge. Ich habe ihre Lösungen kombiniert und eine gefunden, die git grep verwendet (robuster als git ls-files für mein Repo, da es anscheinend nur die Dateien auflistet, die tatsächlichen src-Code enthalten - beispielsweise keine Submodulordner) und dies auch hat der alte Methodenname und der neue Methodenname an nur einer Stelle:

Im [alias] Block meiner ~/.gitconfig Datei:

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

Zu verwenden:

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

Sie könnten git ls-files verwenden in Kombination mit xargs und sed :

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

Du könntest ein

machen
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

Stecken Sie das irgendwo in eine Datei und aliasieren Sie es dann als git sed in deiner Konfig.

Aktualisierung: Der Kommentar von tchrist unten ist eine viel bessere Lösung, da er verhindert, dass Perl wiederholt erscheint.


Linux
  1. N entspricht Top, aber für Netzwerk-E/A?

  2. Git-Autovervollständigung?

  3. Fedora – Gibt es in der Fedora-Welt ein Ppa-Service-Äquivalent?

  4. Unity-Äquivalent der Kde-Kommentarfunktion?

  5. Gibt es STDCALL unter Linux?

So wechseln Sie Branch auf Git

Git-Tutorial für Fortgeschrittene

Rekursives Mkdir?

Blackslash in Sed entkommen?

Gibt es ein WinSCP-Äquivalent für Linux?

Gibt es ein benutzerspezifisches Äquivalent zu /etc/hosts?