Bu deneyin:
sed -r $'s/(\$LD = )(\'.*\')(.*)/\\1_(\\2)\\3/' filename
Örnek:
$ echo "\$LD = 'Some String';" | sed -r $'s/(\$LD = )(\'.*\')(.*)/\\1_(\\2)\\3/'
$LD = _('Some String');
Edit:
Bu bakmak ve hem de değişkenleri değişecek, -i
yerinde değişiklik yapacak:
sed -i -r $'s/(\$(LD|Another) = )(\'.*\')(.*)/\\1_(\\3)\\4/'
Sen boru karakterleri ile ayrılmış değişken isimlerini listeleyebilirsiniz.
Sizin grep
komutu tek tırnak yerine backticks ihtiyacı ve -E
genişletilmiş Regexes kullanmak için. Ayrıca filespec topak ihtiyacı vardır. Eğer gibi regex temelde "Bu dosya, herhangi bir değişken tanımları var mı?" Diyor O herhangi bir değişkenin aramak için diyor ki:
- daha önce hiçbir boşluk ile satırın başında başlar
- (null simge, böylece bir dizi append dahildir) sıfır veya daha fazla basamaktan oluşan sıfır veya daha fazla dizi simgeler var
- Herhangi bir ilişkisel dizi atamaları görmezden (
$array["key"]=value
)
- satırı bir noktalı virgül ile sona ermelidir
- Ben
?
yapmak için tasarlanmıştır ne emin değilim
Değişken atama Bu başarısız:
- Bazı boşlukla sonra oluşur
- bir anahtar olarak bir alfa tuşuna veya bir değişkeni kullanır
- diğer tablolar ile bir çizgi oluşur
- Herhangi bir sondaki boşluk var
- muhtemelen diğerleri
Eğer regex daha sağlam veya daha basit yapmak gerekir ya da sadece herhangi bir PHP dosyası bir değişken atama var ve sed
için bakmak ve ilgi sadece değişkenleri değiştirmek izin olacağını varsayabiliriz.
Lütfen grep
işlemek için dosyaları var, bakmak için dosyaları belirtmek gerekir için sırayla:
grep -E -i -R 'your regex' * | sed ...
Eğer izin verirsen ya, sed
bunu:
find . -name "*.php" | sed ...
Ayrıca, adı verilen bir alet ack
kod dosyalarında şeyler bulmak için grep
a> daha iyidir.
Her durumda, yerinde seçeneğini kullanmak, özellikle I strongly recommend test runs (and backups).