[英]Sed and Awk Escaping Ampersands (&)
我正在解析PHP文件並在HTML中包裝函數原型元素。 但是如果有&符號,則會破壞我的代碼。
輸入 : function foo (&$var1, &$var2){...}
// as String
期望的輸出(以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會先將它處理成'\\&',然后用'se'表示將'\\&'解釋為文字'&'。 我嘗試了1到6個反斜杠,但無濟於事。
問題:如何逃避&?
1手冊: http : //www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_92.html
關於我正在嘗試做什么的一些“元”/設計問題(問題不需要!!)
我有一堆PHP文件,我正在嘗試生成一些文檔(結構像Javadocs)。 我正在使用REGEX和shell腳本進行解析,以便列出函數名稱,參數和返回項目。 到目前為止,我認為REGEX已經很好地完成了,但我已經閱讀了很多關於這是如何不應該使用REGEX的內容。 我歡迎任何有關此問題的評論(通常如何生成文檔?)。 多謝你們!
我相信HTML讀取&
作為&符號。 在您的awk腳本中,您可以使用:
sub(/^&/, "&", param)
美元符號param
需要用反斜杠進行轉義,例如&$ var需要寫為&\\ $ var,否則sed和awk會嘗試將$ var擴展為變量。
使用兩個反斜杠(即sub(/^&/, "\\\\&", param)
)適合我。 它不適合你嗎?
它在您在問題中提到的nawk手冊中有記錄:
像往常一樣,要在字符串中插入一個反斜杠,必須編寫兩個反斜杠。 因此,在字符串常量中寫入“\\\\&”以在替換中包含文字“&”
此外,您的sub()
函數實際上是用&符號替換&符號。 所以也許這就是為什么你認為即使有兩個反斜杠它也不起作用。
sed
方法:
printf "%s\n" 'function foo (&$var1, &$var2){...}//as String' |
sed -n '/function/{s/^.*(//;s/).*$//;p}'
輸出:
&$var1, &$var2
或者如果需要HTML代碼,請將其傳遞給像txt2html
這樣的util:
printf "%s\n" 'function foo (&$var1, &$var2){...}//as String' |
sed -n '/function/{s/^.*(//;s/).*$//;p}' | txt2html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.