如何匹配GNU M4 _properly_换行符(How to match newlines in

2019-10-23 08:23发布

我想制作一个宏替换换行符。

我的第一个尝试是:

    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
++

然后我发现类似的问题: 在M4的patsubst,我怎么用空格代替换行?

所以,我只是做:

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

最后一个选择受到了同样的问题。 有什么建议么?

Answer 1:

最后一行尝试删除围绕ZZ的报价。 当我做这个我有两个m4_pascal_str调用相同的结果:

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




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


文章来源: How to match newlines in GNU M4 _properly_
标签: newline m4