2010-06-20 40 views
0

我正在嘗試製作一個替換換行符的宏。如何匹配GNU M4中的換行符_properly_

我的第一個嘗試是:

define(`m4_pascal_str',` 
    patsubst(`$1',`^\(.*\)$',`\1++') 
') 

m4_pascal_str(` 

11 

22 33 44 
') 

define(zz,` 

11 

22 33 44 
') 
m4_pascal_str(`zz') 

即不使用中間宏時,否則只匹配最後換行符給出正確的答案。請參見下面的結果:

++ 

++ 
11++ 
++ 
22 33 44++ 

++ 

11 

22 33 44 
++ 

後來我發現類似的問題: in m4's patsubst, how do I replace newlines with spaces?

所以,我只是做:

define(`m4_pascal_str',` 
    patsubst(`$1',` 
',`++') 
') 

m4_pascal_str(` 

11 

22 33 44 
') 

define(zz,` 

11 

22 33 44 
') 
m4_pascal_str(`zz') 

它提供:

++++11++++22 33 44++ 

11 

22 33 44 

的最後的選擇受到一樣的問題。 有什麼建議嗎?

回答

1

對於最後一行,請嘗試刪除zz附近的引用。當我這樣做時,我得到了兩個m4_pascal_str調用的相同結果:

 ++ 
++ 
11++ 
++ 
22 33 44++ 
++ 




    ++ 
++ 
11++ 
++ 
22 33 44++ 
++