GNU/Linux >> Belajar Linux >  >> Linux

Apakah ada 'git sed' atau yang setara?

Inilah solusi yang menggabungkan solusi dari Noufal dan claytontstanley serta menghindari menyentuh file yang tidak akan berubah.

Di [alias] blok ~/.gitconfig saya berkas:

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

Untuk menggunakan:

git psed old_method_name new_method_name

Terima kasih kepada Noufal dan Greg untuk postingan mereka. Saya menggabungkan solusi mereka, dan menemukan satu yang menggunakan git grep (lebih kuat daripada file git ls untuk repo saya, karena tampaknya hanya mencantumkan file yang memiliki kode src aktual di dalamnya - bukan folder submodule misalnya), dan juga memiliki nama metode lama dan nama metode baru hanya di satu tempat:

Di [alias] blok ~/.gitconfig saya berkas:

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

Untuk menggunakan:

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

Anda bisa menggunakan git ls-files dikombinasikan dengan xargs dan sed :

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

Anda bisa melakukan

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

tempelkan itu di file di suatu tempat dan kemudian alias sebagai git sed di konfigurasi Anda.

Perbarui: Komentar oleh tchrist di bawah ini adalah solusi yang jauh lebih baik karena mencegah perl muncul berulang kali.


Linux
  1. Mkdir rekursif?

  2. Melarikan Diri dari Blackslash Di Sed?

  3. Unity Setara Dengan Fitur 'komentar' Kde?

  1. Apakah ada yang setara dengan .Net FileSystemWatcher di dunia Linux?

  2. Apakah ada STDCALL di Linux?

  3. perintah fallocate() yang setara di OS X?

  1. Apakah ada Linux yang setara dengan Programmer's Notepad atau Notepad++

  2. Apakah ada pengguna khusus yang setara dengan /etc/hosts?

  3. Apakah ada direktori yang setara dengan /dev/null di Linux?