orgタグ間のテキストの印刷

orgタグ間のテキストの印刷

ファイル内の## mode: orgと に一致する行で囲まれたテキストのセクションを、セクション間に空行を入れて印刷する bash 関数を記述したいと思います。 の前には、任意の数のスペースを入れることができます。## # End of org##

以下は情報を抽出するファイルの例です。

file: test.sh

## mode: org
## * Using case statement
## # End of org
case $arg in
 ("V")
   echo "Author"
   ;;
 (*)
   ## mode: org
   ## ** Silent Error Reporting Mode (SERM) in getopts
   ## *** Detects warnings without printing built-in messages.
   ## *** Enabled by colon {:} as first character in shortopts.
   ## # End of org
   break
   ;;
esac

望ましい出力は次のようになります

* Using case statement

** Silent Error Reporting Mode (SERM) in getopts
*** Detects warnings without printing built-in messages.
*** Enabled by colon {:} as first character in shortopts.

私はそれをやった

capture-org ()
{
  sed -n '/^ *## mode: org$/,/^ *## # End of org$/s/ *//p' "$1" |
   sed 's/^## mode: org$/\n## mode: org/' |
   sed '/^## mode: org$/d' | sed '/^## # End of org$/d' | cut -c 3-
}

もっときれいにできるでしょうか?

答え1

sed '/^[[:space:]]*## mode: org$/,/^[[:space:]]*## # End of org$/!d; /^[[:space:]]*## mode: org$/d; s/^[[:space:]]*## # End of org$//g; s/^[[:space:]]*## //'

これにより、開始パターンと終了パターンの範囲外にあるものがすべて削除されます。次に、開始パターンが削除され、終了パターンが空行 (ブロック区切りになる) に置き換えられます。

関連情報