2

行末に 2 つのスペースを使用して、Markdown で実際の改行を行う方法を学びました。Pandoc などの Markdown ツールを使用するときに、この方法に慣れることで私の生活がずっと楽になるため、この方法に変換したいファイルがたくさんあります。

これらのファイルは現在、次のようになっています。

Roses are red
Violets are blue

Bananas are yellow

Oranges are orange

結果が次のようになるように、複数行の段落を変換したいと思います。

Roses are red<space><space>
Violets are blue

Bananas are yellow

Oranges are orange

悲しいことに、私の Linux fu はその仕事をこなせていません。行の\n終わりがあります。これが私がそれを開始する方法です:

for i in \*; do sed -e 's/\n/  /g' "$i"; done

改行の後に変更してはならない空行 (2 行目) と、改行の後に sed で変更する必要があるテキスト (1 行目) を区別する方法がまったくわかりません。また、空行 (3 行目) は無視する必要があります。誰か助けてくれませんか?

4

4 に答える 4

0

空行を変更する

これのことですか?xx出力で見やすくするために使用していました。

kent$  awk '{$0=$0"xx"}7' f
Roses are redxx
Violets are bluexx
xx
Bananas are yellowxx
xx
Oranges are orangexx

そのため、各「改行」は に置き換えられtwo 'x' with newlineます。これがあなたが探しているものであれば、次のことができます:

awk '{$0=$0"  "}7' file

空行を変更せずに

空行を無視したい場合(空行の場合は置換を行わないでください):これをチェックしてください:

kent$  awk '$0{$0=$0"xx"}7' f
Roses are redxx
Violets are bluexx

Bananas are yellowxx

Oranges are orangexx

上記のように、double x空行には表示されませんでした。次のコマンドを使用できます。

awk '$0{$0=$0"  "}7' file

編集

kent$  awk 'NR==1{p=$0;next}{p=p&&$0?p"xx":p; print p;p=$0}END{print $0}' f
Roses are redxx
Violets are blue

Bananas are yellow

Oranges are orange

上記のワンライナーを確認してください。すべての空行と空行の前の行は無視されます。ファイルの最後の行も無視されます。

于 2013-09-02T12:20:03.913 に答える
0

これはうまくいくかもしれません(GNU sed):

 sed '$!N;/^\s*\n\|\n\s*$/!s/\n/<space><space>&/;P;D file

これにより、パターン スペースに 2 行が保持されます。1 行目または 2 行目が空の場合、つまり段落の開始または終了の場合は、最初の行を変更せずに出力します。ただし、そうでない場合は、目的の文字列を改行の前に付けます。

于 2013-09-02T16:20:55.593 に答える