5

我正在解析一个 PHP 文件并将函数原型元素包装在 HTML 中。但是,如果有&符号,它会破坏我的代码。

Input : function foo (&$var1, &$var2){...}//as String
Desired output (in 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 不应该用于此的内容。我欢迎对此提出任何意见(文档通常是如何生成的?)。多谢你们!

4

3 回答 3

0

使用两个反斜杠(即sub(/^&/, "\\&", param))对我有用。它不适合你吗?

它记录在您在问题中提到的 nawk 手册中:

像往常一样,要在字符串中插入一个反斜杠,您必须写两个反斜杠。因此,在字符串常量中写入 `\\&' 以在替换中包含文字 `&'

此外,您的sub()功能本质上是用&符号替换&符号。因此,也许这就是为什么您认为即使使用两个反斜杠也无法正常工作的原因。

于 2013-06-22T06:36:27.653 回答
0

我相信 HTML 读&作 & 字符。在您的 awk 脚本中,您可以使用:

sub(/^&/, "&", param)

美元符号param需要用反斜杠转义,例如 &$var 需要写为 &\$var,或者 sed 和 awk 将尝试将 $var 扩展为变量。

于 2013-06-21T18:57:49.317 回答
0

sed方法:

printf "%s\n" 'function foo (&$var1, &$var2){...}//as String' | 
sed -n '/function/{s/^.*(//;s/).*$//;p}'

输出:

&$var1, &$var2

或者,如果需要 HTML 代码,请将其传递给类似的 util txt2html

printf "%s\n" 'function foo (&$var1, &$var2){...}//as String' | 
sed -n '/function/{s/^.*(//;s/).*$//;p}' | txt2html
于 2017-10-02T02:59:28.077 回答