GNU/Linux >> Znalost Linux >  >> Linux

Existuje 'git sed' nebo ekvivalent?

Zde je řešení, které kombinuje řešení Noufal a claytontstanley a vyhýbá se dotyku se soubory, které se nemění.

V [alias] blok mých ~/.gitconfig soubor:

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

Použití:

git psed old_method_name new_method_name

Díky jak Noufalovi, tak Gregovi za jejich příspěvky. Zkombinoval jsem jejich řešení a našel jsem jedno, které používá git grep (robustnější než soubory git ls-files pro můj repo, protože se zdá, že uvádí pouze soubory, které v sobě mají skutečný kód src - například ne složky submodulu), a také má název staré metody a název nové metody pouze na jednom místě:

V [alias] blok mého ~/.gitconfig soubor:

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

Použití:

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

Můžete použít git ls-files v kombinaci s xargs a sed :

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

Můžete udělat

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

vložte to někam do souboru a pak to pojmenujte jako git sed ve vaší konfiguraci.

Aktualizace: Komentář od tchrist níže je mnohem lepším řešením, protože zabraňuje opakovanému spawnování perlu.


Linux
  1. N Ekvivalent horní části, ale pro síťový I/O?

  2. Uniknout Blackslash v Sed?

  3. Fedora – Existuje ve světě Fedory ekvivalent služby Ppa?

  1. Existuje STDCALL v Linuxu?

  2. ekvivalent příkazu fallocate() v OS X?

  3. Existuje nějaký ekvivalent vína pro spouštění aplikací pro Mac?

  1. Existuje Windows ekvivalent příkazu Unix strings?

  2. Existuje linuxový ekvivalent Programmer's Notepad nebo Notepad++

  3. Existuje ekvivalent cd - pro cp nebo mv?