如何正确匹配 GNU 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
++
然后我发现了类似的问题: 在 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
最后一个替代方案也遇到了同样的问题。 有什么建议吗?
I am trying to craft a macro replacing newlines.
My first try was:
define(`m4_pascal_str',`
patsubst(`$1',`^\(.*\)
That gives correct answer when not using intermediate macro, and match only last newline otherwise. See results below:
++
++
11++
++
22 33 44++
++
11
22 33 44
++
Then I found similar question:
in m4's patsubst, how do I replace newlines with spaces?
So, I just made:
define(`m4_pascal_str',`
patsubst(`$1',`
',`++')
')
m4_pascal_str(`
11
22 33 44
')
define(zz,`
11
22 33 44
')
m4_pascal_str(`zz')
It gives:
++++11++++22 33 44++
11
22 33 44
The last alternative suffers the same problem.
Any suggestions?
,`\1++')
')
m4_pascal_str(`
11
22 33 44
')
define(zz,`
11
22 33 44
')
m4_pascal_str(`zz')
That gives correct answer when not using intermediate macro, and match only last newline otherwise. See results below:
Then I found similar question:
in m4's patsubst, how do I replace newlines with spaces?
So, I just made:
It gives:
The last alternative suffers the same problem.
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于最后一行,尝试删除 zz 周围的引号。当我这样做时,我对两个 m4_pascal_str 调用得到了相同的结果:
For the last line try removing the quoting around the zz. When I did this I got the same result for both m4_pascal_str calls: