我正在解析PHP文件并用HTML包装函数原型元素。但是,如果有&符号,则会破坏我的代码。
输入:function foo (&$var1, &$var2){...}
//作为字符串
所需的输出(以HTML格式):&$var1, &$var2
//基本上,只输出变量以便在浏览器中正确显示
现在,我将每个变量发送到awk的子方法 1 ,然后发送到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,会解释'\&'作为文字'&'。我尝试了1到6个反斜杠,但无济于事。
问题:如何逃避&?
1 手册:http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_92.html
关于我正在尝试做什么的一些“元”/设计问题(问题不需要!!)
我有一堆PHP文件,我正在尝试生成一些文档(结构像Javadocs)。我正在使用REGEX和shell脚本进行解析,以便列出函数名称,参数和返回项目。到目前为止,我认为REGEX已经很好地完成了,但我已经阅读了很多关于这是如何不应该使用REGEX的内容。我欢迎任何有关此问题的评论(通常如何生成文档?)。谢谢你们!
答案 0 :(得分:0)
我相信HTML会将&
作为&符号。在您的awk脚本中,您可以使用:
sub(/^&/, "&", param)
param
中的美元符号需要使用反斜杠进行转义,例如& $ var需要写成& \ $ var,否则sed和awk会尝试将$ var扩展为变量。
答案 1 :(得分:0)
使用两个反斜杠(即sub(/^&/, "\\&", param)
)对我有用。它不适合你吗?
您在问题中提到的the nawk manual中记录了这一点:
像往常一样,要在字符串中插入一个反斜杠,必须编写两个反斜杠。因此,写'\\&'在一个字符串常量中包含一个文字`&'在替换
此外,您的sub()
功能实际上是用&符代替&符号。所以也许这就是为什么你认为即使有两个反斜杠它也不起作用。
答案 2 :(得分:0)
sed
方法:
printf "%s\n" 'function foo (&$var1, &$var2){...}//as String' |
sed -n '/function/{s/^.*(//;s/).*$//;p}'
输出:
&$var1, &$var2
或者如果需要HTML代码,请将其传递给像txt2html
这样的工具:
printf "%s\n" 'function foo (&$var1, &$var2){...}//as String' |
sed -n '/function/{s/^.*(//;s/).*$//;p}' | txt2html