如何正确匹配 GNU M4 中的换行符

发布于 2024-09-06 00:25:10 字数 802 浏览 7 评论 0原文

我正在尝试制作一个宏来替换换行符。

我的第一次尝试是:

    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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丑疤怪 2024-09-13 00:25:10

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

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




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

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:

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




     ++
++
11++
++
22 33 44++
++
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文