M4を使用して入力ファイルから空の行(余分な空の行)を削除するにはどうすればよいですか?
dnl
スクリプトの各行の最後に改行出力を抑制するために追加できることはわかっていますが、意味する空白行はスクリプトではなく、含まれているデータファイルにあります(ここに置くことは想定されていませんdnl's
)。
私はそのようなことを試みました:
define(`
',`')
(改行を何も置き換えないでください)しかし、それは機能しませんでした。
ありがとう。
M4を使用して入力ファイルから空の行(余分な空の行)を削除するにはどうすればよいですか?
dnl
スクリプトの各行の最後に改行出力を抑制するために追加できることはわかっていますが、意味する空白行はスクリプトではなく、含まれているデータファイルにあります(ここに置くことは想定されていませんdnl's
)。
私はそのようなことを試みました:
define(`
',`')
(改行を何も置き換えないでください)しかし、それは機能しませんでした。
ありがとう。
divert()
私は私の定義の周りに使用します:
divert(-1)
出力を抑制しますdivert(0)
出力を復元します例えば:
divert(-1)dnl output supressed starting here
define(..)
define(..)
divert(0)dnl normal output starting here
use_my_definitions()...
あなたの問題は、余分な改行を含むデータ ファイルであると理解していdata<NL>moredata
ますdata<NL><NL>moredata
。
ヒア ドキュメントを使用してデータ セットを生成し、m4 スクリプトを実行してデータ セットの区切りを削除するコマンド ラインにカット アンド ペーストするサンプルを次に示します。patsubst コマンドが、1 つまたは複数の改行のすべてのインスタンスを順番に ( <NL><NL>*
) 正確に 1 つの改行に置き換えることがわかります。
cat > data << -----
1, 2
3, 4
5, 6
7, 8
9, 10
11, 12
e
-----
m4 << "-----"
define(`rmbreaks', `patsubst(`$*', `
*', `
')')dnl
rmbreaks(include(data))dnl
-----