SEDまたはAWKを使用したテキストフィルタリング

SEDまたはAWKを使用したテキストフィルタリング

私のドキュメントには次の側面があります。

Text1
\begin{code}
code1
\end{code}
Text2
\begin{code}
  -- comment1
  code1A
\end{code}
Text3

\begin{code}
  -- comment2
  code1B
\end{code}
Text4

\begin{code}
codeB
\end{code}
Text 5

私が探している結果は次のとおりです。

code1

  -- comment1
  code1A

  -- comment2
  code1B

codeB

答え1

ノート:質問を修正すると、このソリューションは廃止されました。


特定の出力行だけをフィルタリングしたいので、これを行うとgrep操作が行われます。

$ grep -v -e "T[0-9]" -e '^\\begin{code}$' -e '^\\end{code}$' file.txt
code1
  -- comment1
  code1A
  -- comment2
  code1B
codeB

答え2

ルール/論理を指定せずに目的の出力を公開することは、実際にはトラブルシューティングには役立ちません。誰かが入力を含まずに出力をエコー/印刷できますか? 2つの間に線を入れ、2つのうちの1つを除外するとし\begin{code}ます\end{code}

sed -n '/\\begin/,/\\end/ {/{code}/!p}' file
code1
  -- comment1
  code1A
  -- comment2
  code1B
codeB

空行が必要な場合は、スクリプト/^ *$/pに追加してください。sed

編集する:このように:

$ sed -n '/\\begin/,/\\end/ {/{code}/!p}; /^ *$/p' file
code1
  -- comment1
  code1A

  -- comment2
  code1B

codeB

関連情報