2

次のような特定の行についてソースをスキャンしたいと思います。

$obj->setLabel('output this text')->someOtherMethod(etc);

また:

$this->view->title = "I want this text";

もちろんコードはPHPです。Zend フレームワークを使用しています。それは本当に問題ではありません。

私はLinuxを実行しており、パイプを理解しています。私はパイプできると思います:

grep --include=*.php -R 'setLabel(' .

awkなどに。「1つ以上の」文字のそれぞれを、引用符で囲み、コンマで終了する独自の行に出力したいだけです。その時、CSV 翻訳ファイルはそれほど遠くありません。

一度に 1 つのパターンのみを検索することを期待しています。最初に、すべての「ラベル」などを取得します。

注: POedit などについては知っています。静的 UI の翻訳には CSV ファイルを使用しています。私はそれを変えるつもりはありません。「Excel」を使いたいだけのサードパーティが編集できる必要があります(身震い...)

これは私が最終的に使用したものです:

grep -oh --include=*.php -R -E "setLabel\('[^']*'\)" . > labels.txt

次に、不要な「setLabel(」および「)」をテキスト エディターで削除します。しかし、私はよりクリーンなワンライナーに非常に熱心です。あぁ…コードゴルフもある。あの人たちに聞いてみようかな…

4

2 に答える 2

2

Ruby(1.9+)

検索したいと言うsetLabel

$ ruby -ne 'puts $_.scan(/.*setLabel\(\047(.[^)]*)\047/)' file
output this text

検索したいと言うview-title

$ ruby -ne 'puts $_.scan(/.*view->title\s+=\s+\042(.[^"]*)\042/)' file
I want this text
于 2011-02-10T11:49:07.150 に答える
2

findとを使用するのはどうですかsed:

find . -type f -name '*.php' -exec sed -ne "s/.*setLabel('\([^']\+\)').*/\1/p" {} \;

find . -type f -name '*.php' -exec sed -ne "s/.*view->title = \"\([^\"]\+\)\".*/\1/p" {} \;
于 2011-02-10T15:17:09.560 に答える