2

次のような複数の段落を含むファイルがあるとします

Lorem ipsum dolor sit amet. Velit et ornare feugiat ve fringilla adipiscing, non
augue risus, eleifend. Laoreet a, taciti porttitor mus. Erat leo metus
venenatis. Natoque eni, nunc quis elit est. Nec enim dui. Sem parturient lectus,
sed, egestas. Amet nascetur quisque, nonummy amet ut odio proin hymenaeos sit,
consequat proin hymenaeos vestibulum. Duis ad penatibus natoque, fames nec amet
eni inceptos. Ligula orci scelerisque laoreet, massa leo dictumst feugiat
praesent varius netus suspendisse. Et et quis volutpat quam, aenean sit, magnis
integer ad luctus hendrerit per. Lectus adipiscing nascetur quisque consectetuer
feugiat etiam eros. Natoque massa. Semper ut nam tortor. Odio ut nullam mus,
sociis at, luctus aliquet at odio habitant fames.

Penatibus ipsum lacus blandit ad dis ante dolor. Cursus porta penatibus
facilisi. Nisl erat rutrum primis dis elit dolor penatibus pretium duis
sollicitudin ut. Sed urna leo massa cubilia eget, elementum mus. Ve metus ac
vitae at litora tincidunt id, ac hac. Dis justo nullam. Fames sollicitudin,
augue ve at. Tristique. Primis convallis praesent, eget. Nullam, penatibus ut,
proin non mus id nascetur dis, lorem arcu. Magna urna nascetur ornare, nunc
proin quisque cum, pharetra. Quisque, litora eu lobortis diam eros. Vel mi
hymenaeos ipsum in. Ligula curabitur ve, magnis hymenaeos euismod.

このファイルは、マークダウン ファイルを処理して生成されたもので、ご覧のとおり、約 80 文字で改行されています。Perl、sed、または awk を使用して (Linux を実行しているので、任意のソリューションを使用できますが、Python や Ruby のユーザーはあまりいません)、段落内の改行を元に戻すにはどうすればよいですか?

ファイル全体から削除する方法は知って\nいますが、それでは表示されている 2 つの段落が途切れのない 1 行に表示されてしまいます。私はそれをしたくありません。一度に 1 つの段落を操作したいだけなので、\nコンテンツが だけの行をスキップする必要があります。

私が持っているファイルは、Unix/Linux のファイル末尾、つまり改行を使用しているため、\n存在するのは 1 つだけです。段落間のスペースを保持する必要があります。

4

4 に答える 4

1

ファイル全体をメモリに読み込む必要はありません。

$ cat file
Lorem ipsum dolor sit amet. Velit et ornare feugiat ve fringilla adipiscing, non
augue risus, eleifend. Laoreet a, taciti porttitor mus. Erat leo metus
venenatis. Natoque eni, nunc quis elit est.

Penatibus ipsum lacus blandit ad dis ante dolor. Cursus porta penatibus
facilisi. Nisl erat rutrum primis dis elit dolor penatibus pretium duis
sollicitudin ut. Sed urna leo massa cubilia eget, elementum mus. Ve metus ac
vitae at litora tincidunt id, ac hac. Dis justo nullam.

$ awk -v RS= -v ORS='\n\n' -F'\n' '{$1=$1}1' file
Lorem ipsum dolor sit amet. Velit et ornare feugiat ve fringilla adipiscing, non augue risus, eleifend. Laoreet a, taciti porttitor mus. Erat leo metus venenatis. Natoque eni, nunc quis elit est.

Penatibus ipsum lacus blandit ad dis ante dolor. Cursus porta penatibus facilisi. Nisl erat rutrum primis dis elit dolor penatibus pretium duis sollicitudin ut. Sed urna leo massa cubilia eget, elementum mus. Ve metus ac vitae at litora tincidunt id, ac hac. Dis justo nullam.
于 2013-10-22T22:04:31.767 に答える
1

chomp()正規表現が空白以外の文字を含む行に一致する場合は、最後に改行を試みます。

perl -pe 'chomp if m/\S/' infile 

編集:段落と最後の改行文字の間に空白行を保持するには、次のことを試してください。

perl -pe 'm/\S/ ? chomp() : print "\n"; END { print "\n" }' infile
于 2013-10-21T16:20:53.310 に答える
0

\n が唯一のコンテンツである行。少なくとも 2 つの連続する改行文字を意味します。

正規表現で簡単にできます。正規表現パターンは (?:[^\r\n])\n(?:[^\r\n]) になります

サンプルの python ファイル

import re

mystring = """sjdfkj

adlfklk 
dlkfl """ 

print re.sub(r"(?:[^\r\n])\n(?:[^\r\n])"," ",mystring)
于 2013-10-21T16:31:17.080 に答える