GNU-M4:剥去空行

时间:2012-12-12 15:06:01

标签: preprocessor m4

如何使用M4从输入文件中删除空行(剩余的empy行)?

我知道我可以将dnl附加到我脚本的每一行的末尾以抑制换行输出,但我的意思是空白行不在我的脚本中,而是在包含的数据文件中(其中)我不应该放dnl's)。

我尝试过类似的东西:

define(`
',`')

(什么都不换新线) 但它没有用。

感谢。

2 个答案:

答案 0 :(得分:3)

我在我的定义中使用divert()

  • divert(-1)将取消输出
  • divert(0)将恢复输出

例如:

divert(-1)dnl output supressed starting here

define(..)

define(..)

divert(0)dnl normal output starting here
use_my_definitions()...

答案 1 :(得分:1)

我理解你的问题是一个带有额外换行符的数据文件,这意味着你希望模式data<NL>moredata的位置有data<NL><NL>moredata之类的东西。

这是一个剪切/粘贴到命令行的示例,该示例使用此处的文档生成数据集并运行m4脚本以删除数据集中的中断。您可以看到patsubst命令用一个换行符替换序列中的一个或多个换行符的每个实例(<NL><NL>*)。

cat > data << -----
1, 2
3, 4

5, 6

7, 8



9, 10
11, 12
e
-----

m4 << "-----"
define(`rmbreaks', `patsubst(`$*', `

*', `
')')dnl
rmbreaks(include(data))dnl
-----