Başka bir dosyadan php yerine dize

1 Cevap php

i have some old php files which i'd like to convert to use gettext. those files have a content like this :

$LD = 'Some String';
$Another = 'some other ~n~ string';

i tüm $ LD yerine, onlar gibi bir şey ile bildirilen dosyalar başka bir $:

_('Some string');

hacking a bit a created some sort of regexp to find the declarations, my aim was to use sed and awk to do the replaces..but i don't have any clue on how to do those substitutions ...

herhangi bir yardım ...

1 Cevap

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 daha iyidir.

Her durumda, yerinde seçeneğini kullanmak, özellikle I strongly recommend test runs (and backups).