如何匹配GNU M4中的换行符_properly_

时间:2010-06-20 09:58:18

标签: newline m4

我正在尝试制作替换换行符的宏。

我的第一次尝试是:

    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 个答案:

答案 0 :(得分:2)

对于最后一行,请尝试删除 zz 周围的引号。当我这样做时,我得到了m4_pascal_str调用的相同结果:

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




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