6

M4を使用して入力ファイルから空の行(余分な空の行)を削除するにはどうすればよいですか?

dnlスクリプトの各行の最後に改行出力を抑制するために追加できることはわかっていますが、意味する空白行はスクリプトではなく、含まれているデータファイルにあります(ここに置くことは想定されていませんdnl's)。

私はそのようなことを試みました:

define(`
',`')

(改行を何も置き換えないでください)しかし、それは機能しませんでした。

ありがとう。

4

2 に答える 2

4

divert()私は私の定義の周りに使用します:

  • divert(-1)出力を抑制します
  • divert(0)出力を復元します

例えば:

divert(-1)dnl output supressed starting here

define(..)

define(..)

divert(0)dnl normal output starting here
use_my_definitions()...
于 2013-03-05T17:24:09.437 に答える
1

あなたの問題は、余分な改行を含むデータ ファイルであると理解してい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
-----
于 2013-06-03T13:44:19.140 に答える