sed段落タグ

sed段落タグ

各段落{p}の前後に段落タグを使用して段落をプレーンテキストで囲む方法は?各段落は空行で区切られます。テキストファイル内のすべての空白行を見つけるために使用できますが、常に{p}がどこにでも挿入され、それを変更する方法がわかりません。また、最後の段落の後には空行がないので、最後の段落では何もしません。{/p}sedsed -e 's/^\s*$/<r>/ somefile.txt

テキスト入力:

Section 5. General Information About Project Gutenberg-tm electronic
works.

Description

Professor Michael S. Hart is the originator of the Project Gutenberg-tm
concept of a library of electronic works that could be freely shared
with anyone.

Project Gutenberg-tm eBooks are often created from several printed
editions, all of which are confirmed as Public Domain in the U.S. unless
a copyright notice is included.

希望の出力:

Section 5. General Information About Project Gutenberg-tm electronic
works.
{p}
Description
{/p}
{p}
Professor Michael S. Hart is the originator of the Project Gutenberg-tm
concept of a library of electronic works that could be freely shared
with anyone.
{/p}
{p}
Project Gutenberg-tm eBooks are often created from several printed
editions, all of which are confirmed as Public Domain in the U.S. unless
a copyright notice is included.
{/p}

答え1

最初にソリューションをリクエストしたので、sed次のいずれかを添付します。

sed '/./{H;1h;$! d}
g;/{p}$/d
s#^{p}.*#&\n{/p}#;p
s/.*/{p}/;h;d' somefile.txt

説明する

  • 行1:空でない行を保持バッファに追加します(改行で開始したくない場合は、最初の行を追加する代わりにコピー)。空行またはファイルの終わりを処理し続けます。
  • 行2:複数の空の行またはバッファーの末尾にある空の行を処理するためにテキストのないバッファーを無視します。
  • 行3:開くタグがある場合は終了タグを追加します。その後、印刷します。
  • 行4:新しい開始タグで保持バッファを埋めます。

答え2

私が提案するアッ方法:

awk 'NR>1 && NF{$0="{p}" RS $0 RS "{/p}"}1' file

出力:

Section 5. General Information About Project Gutenberg-tm electronic works.

{p}
Description
{/p}

{p}
Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support.
{/p}

{p}
Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition.
{/p}

RS- awkのレコード区切り記号、デフォルトは改行です。\n

NR>1- 最初のものをスキップヘッダーワイヤー

NF- 行を指すフィールドの総数(空でない行を考慮)

関連情報