私はPHPファイルを解析し、関数プロトタイプ要素をHTMLでラップしています。しかし、アンパサンドがあると、コードが壊れます。SedとAwkエスケープアンパサンド(&)
入力:function foo (&$var1, &$var2){...}
//文字列として
(HTML内)所望の出力:&$var1, &$var2
//基本的には、単に出力変数、それらが正しくブラウザに表示されるように
今各変数をawkのサブメソッドに送信してからsedに送信します。アンパサンドが解釈されている:私は取得しています
sub(/^&/, "\\\&", param) #param is the variable of interest (e.g. &$var1)
#Intermediate step in case it's relevant. The awk-processed elements
#are sent to ${file}_param.txt. Each set of parameters are delimited by colons.
param=$(cut -d: -f$counter ${file}_param.txt)
#Replace some default text in template file with real stuff.
sed -i "s|@PARAM|$param|1" "$base"_funct_def.txt
出力。試合全体が置き換えられます。
問題の分離:代わりに、次のようにすると、ブラウザに 'g $ var1'が表示されます。しかし、私は代わりに '&'を取得しようとしています。
sub(/^&/, "g", param)
私の試み:私はawkは最初の「&」リテラルとして解釈するsedのに送り込ま、「\ &」、「\ &」にそれを処理するだろうと思ったので、は、私は3つのバックスラッシュを使用しました。私はどこからでも1から6のバックスラッシュを試しましたが、役に立たない。
質問: &からどのように私を逃すことができますか?
マニュアル:(質問のために必要ではない!!)私がやろうとしているものについてhttp://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_92.html
いくつかの "メタ" /デザイン質問
私はの束を持っています私が(Javadocsのように構造化した)少しのドキュメンテーションを生成しようとしているPHPファイル。私は、REGEXとシェルスクリプトを使って解析し、関数名、パラメータ、および返品項目を列挙します。これまでのところ、REGEXはかなりうまくいきましたが、REGEXを使用しないでください。私はこれに関するコメントを歓迎します(ドキュメントは通常どのように生成されますか?)。みんなありがとう!
'$ param'何実際には?コマンドが順番に実行されない場合(例えば、間に実際に他のコードがある場合など)、それらを同じコードブロックに置くべきではありません。誤解を招きます。 – doubleDown
誤解を招く部分にごめんなさい。私はそれを将来も心に留めておきます。 $ paramにはパラメータ要素が含まれています。たとえば、関数がある場合: 'function foo(&$ arg1、$ arg2)' $ paramは ''&$ arg1''となります。 良いニュース:私は修正を見つけました。 sedを実行する前に、必ず「&」をエスケープしました。 'param = $(echo $ param | sed 's | ^&| \\&| g')' これは、awkのものをラップしようとするのとは対照的ですコードの一部。 – bobbyjoe93