簡體   English   中英

Sed和Awk逃離&符號(&)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM