一晩中検索しましたが、解決策が見つかりませんでした。 (私も読みました。テキストから特定のラテックスコマンドと次の閉じ括弧を削除します。)
特殊コマンドのパラメータを2番目のファイルに抽出したいLaTeXファイルがいくつかあります。
多くの「短い」行、つまり80文字すべてを含む改行行を持つLaTeXファイルを想像してみてください。したがって、問題のコマンドの引数は、ソースファイル内の2行以上に渡る可能性があります。また、抽出する必要がある追加の中括弧を含むいくつかの追加のLaTeXコマンドがあるかもしれません。
Lorem ipsum dolor sit amet, \ltxcmd{consetetur sadipscing} elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
erat, sed diam voluptua. At vero eos et accusam et justo \ltxcmd{duo
dolores \emph{et ea rebum}}. Stet clita kasd gubergren, \ltxcmd{sea takimata
\textbf{sanctus} \emph{est} Lorem} ipsum dolor sit amet. Lorem ipsum dolor sit
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam
voluptua. At vero eos et accusam et justo duo dolores et ea
rebum.
これにより、次の3つのパラメータが返されます。
{consetetur sadipscing}
{duo dolores \emph{et ea rebum}}
{sea takimata \textbf{sanctus} \emph{est} Lorem}
私は最初に試しました。
cat file1.tex | sed -n 's/.*\\ltxcmd\({[[:alnum:] ]*}\).*/\1/p'
しかし、これを行うと、行末で検索が終了するため、試してみました。
tr \n ' ' < file1.tex | sed -n 's/.*\\ltxcmd\({[[:alnum:] ]*}\).*/\1/p'
最初の項目を返し、残りは変更せずに残します。
次の試みは、g
検索を再開するためにsed式の末尾にaを追加することでしたが、役に立ちませんでした。
どのようなヒントがありますか? bashとsedを歓迎します。
ベストアンサー1
あなたの質問に対する答えではありませんが、コメントが長すぎます。
Bashや他のコマンドラインでは複雑です。私の考えでは、これらの最大の難しさは、他の行に入れ子にすることができるので、{
どちらが閉じ括弧であるかを判断するために開く括弧を数える必要があるということです。}
この問題を解決するための最高のツールとしてPythonスクリプトをお勧めします。
正規表現を使用するには、Notpad++(ワインと連携)を使用できます。私が言及したネスト\\ltxcmd(\{.*\})
ではなかったら、{}
同様のことがうまくいくでしょう。
Python正規表現検索の開始点 https://stackoverflow.com/questions/454456/how-do-i-re-search-or-re-match-on-a-whole-file-without-reading-it-all-into-memor