複数行を1行に変換しますが、段落を維持する方法

複数行を1行に変換しますが、段落を維持する方法

スペルエラーがある場合は、バージョン管理を容易にするために、各文に別々の行に複数の(マークダウン)テキストがあるとします。例file.txt:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Dictum sit amet justo donec enim diam vulputate.
Nunc faucibus a pellentesque sit amet.

Quis enim lobortis scelerisque fermentum dui faucibus in.
Leo duis ut diam quam nulla porttitor massa id neque.
Vitae tortor condimentum lacinia quis vel eros.

次のように各段落を1行に変換するにはどうすればよいですか?

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Dictum sit amet justo donec enim diam vulputate. Nunc faucibus a pellentesque sit amet.

Quis enim lobortis scelerisque fermentum dui faucibus in. Leo duis ut diam quam nulla porttitor massa id neque. Vitae tortor condimentum lacinia quis vel eros. Velit euismod in pellentesque massa placerat duis ultricies lacus.

\n私の考えは、ピリオドとスペース以外の文字の間の.改行文字を見つけて置き換えることです\S。 regex101でこれを行う方法を見つけました。ここしかし、私のbashシェルで使用できるより短いtr / sed / awkがあるかどうか疑問に思います。それはまるでcat file.txt | ???

ベストアンサー1

perl短絡モードが渡されました。-00 perlruninputフラグなので、すべての内部改行文字を空白に置き換えると次のようになります。

$ wc -l input
       7 input
$ perl -00 -pe 's/\n(?!\Z)/ /g' input | wc -l
       3
$ 

ビット(?!\Z)は、各段落の終わりで改行を変更せずに段落境界を維持することです。

別のオプションはですlex。これは、いくつかのトリッキーな問題、特にEOFPOSIXが要求するように最終改行文字を処理する方法と常に含めるかどうか、および段落定義(正確に2つの改行文字ですか、それとも任意の数字ですか?)を明らかにします。

%%

[\n][\n]+ { printf("%s", yytext); }
\n        { int c = input();
            /* TODO book docs say this should return EOF on EOF ?? */
            if (c == 0) {
                putchar('\n');
                yyterminate();
            } else {
                printf(" %c", c);
            }
          }
<<EOF>>   { putchar('\n'); yyterminate(); }

%%

int main(int argc, char *argv[])
{
    return yylex();
}

それ以上が必要な場合があります

$ make paranlneg
lex  -o lex.paranlneg.c paranlneg.l
egcc -O2 -pipe    -o paranlneg lex.paranlneg.c  -ll
rm -f lex.paranlneg.c
$ perl -E 'say "a\nb\n\nc\nd"' | ./paranlneg
a b

c d
$ 

おすすめ記事