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行は複数行にまたがる可能性があります。
\author{Author 1,
Author 2,
Author 3}
これら2つの問題を解決する方法を知っている人はいますか?
ベストアンサー1
grep -zPo '\\author{\K[^}]*' ex1.tex | tr '\0\n' '\n '
いくつかの簡単な説明:
-z
入出力レコード(「行」)はNULL()で区切られています\0
。したがって、TeXファイル全体は1つのレコードになります。-P
Perl PCRE正規表現バリアントを使用してください。-o
regExpに一致するレコード部分のみが出力されます。\\author{\K
左のコンテキストを表します。
tr '\0\n' '\n '
出力レコード区切り文字を変更し(\0
to \n
)、名前内の改行を削除します(\n
to )