複数行からパターンを抽出する

複数行からパターンを抽出する

test.tex次のような内容のファイルがあります。

\documentclass{scrartcl}
\usepackage{graphicx}
\title{Test}
\author{Author 1, Author 2, Author 3}
\begin{document}
\end{document}

で書かれたすべての著者を抽出したいと思います{ ... }。だから私は次のことをしました。

authors=$(cat test.tex | grep '\author' | tr -d '\author' | tr -d '{' | tr -d '}' )

このコードはこの場合にのみ機能します。私の質問は

  1. []代わりにいるかもしれません。{}
  2. 以下の例に示すように、1行は複数行にまたがる可能性があります。

\author{Author 1,

Author 2,

Author 3}

これら2つの問題を解決する方法を知っている人はいますか?

ベストアンサー1

grep -zPo '\\author{\K[^}]*' ex1.tex | tr '\0\n' '\n '

いくつかの簡単な説明:

  • -z入出力レコード(「行」)はNULL()で区切られています\0。したがって、TeXファイル全体は1つのレコードになります。
  • -PPerl PCRE正規表現バリアントを使用してください。
  • -oregExpに一致するレコード部分のみが出力されます。
  • \\author{\K左のコンテキストを表します。

tr '\0\n' '\n ' 出力レコード区切り文字を変更し(\0to \n)、名前内の改行を削除します(\nto

おすすめ記事