Bashでsed/awkを使用して、一致する連続する括弧のペアを見つけ、それらを囲むコンテンツに置き換える簡単な方法は何ですか?
入力:
_(body1)
_
出力:
_body1
_
これはで行うことができます
_echo "(body1)" | sed 's/[()]//g'
_
ただし、最終的な目標は、ソースファイルから特定の(tex)コマンドを削除することであるため、すべての開始/終了括弧を削除するだけでは不十分です。
入力:
_Alea {\color{red}iacta} est. \textbf{Hic} forum est, populus {\color{red}properant}.
_
出力:
_Alea iacta est. \textbf{Hic} forum est, populus properant.
_
これまでのところ、私はテキストを抽出することができました:
_awk -v FS="({\\color{red}|})" '{print $2}' $file.tex
_
sed -E 's/\{\\color\{red}([^{}]*)\}/\1/g'
を使用すると、\ color {red}コマンドのみを削除できますが、コマンドの開始と終了は同じ行にある必要があります。
閉じ括弧_}
_の前に複数行にまたがるコマンドを削除するにはどうすればよいですか?
誰かが興味を持っている場合、次のコマンドはボーナスの問題を解決するようです:sed -i -r 's#\{\\color\{red\}([^}]*)\}#\1#g' $file.tex sed -i -r ':a;N;$!ba;s#\{\\color\{red\}([^}]*)\}#\1#' $file.tex
最初のコマンドは、_{\color{red}
_と_}
_のすべてのペアを1行で削除します。 2番目のコマンドは、複数の行にまたがるすべてのペアを削除します。
あなたが始めている単純な質問でさえ、いくらかの複雑さを隠しています。私はから始めます
sed -E 's/\(([^()]*)\)/\1/'
括弧ペアがなくなるまで繰り返されます。これにより、最も内側のテキストが置き換えられます。
$ echo "((body))" | sed -E 's/\(([^()]*)\)/\1/'
(body)
Kusalananda が示唆しているように、TeXコマンドを削除するには、TeX Live(およびほとんどのディストリビューション)で利用可能なdetex
をチェックする必要があります。このような処理には、括弧や中括弧を一致させるだけでは不十分です。さまざまなコマンドの動作について少し知っておく必要があります。あなたの例でも、\color
一方向に処理する必要があります。\textbf
別の.。