我想使用 bash 脚本从 LaTeX 文档中过滤掉脚注。它可能看起来像以下任一示例:
Some text with a short footnote.\footnote{Some \textbf{explanation}.}
Some text with a longer footnote.%
\footnote{Lorem ipsum dolor
sit amet, etc. etc. etc. \emph{along \emph{multiple} lines}
but all lines increased indent from the start.}
遗迹应该是:
Some text with a short footnote.
Some text with a longer footnote.%
我不关心额外的空格。
由于匹配括号不能用正则表达式完成,我想我不能为此使用 sed
。 awk
或其他工具是否可行?
最佳答案
使用 GNU awk 将记录拆分为字符的多字符 RS 和空 FS:
$ cat tst.awk
BEGIN { RS="[\\\\]footnote"; ORS=""; FS="" }
NR>1 {
braceCnt=0
for (charPos=1; charPos<=NF; charPos++) {
if ($charPos == "{") { ++braceCnt }
if ($charPos == "}") { --braceCnt }
if (braceCnt == 0) { break }
}
$0 = substr($0,charPos+1)
}
{ print }
$ awk -f tst.awk file
Some text with a short footnote.
Some text with a longer footnote.%
关于bash - 匹配多行括号(使用 awk?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44809301/