我已经看过几个与这个问题相关的答案,但是,我仍然无法得到我需要的工作。
基本上,我正在写一篇在标记容器中使用书目代码的论文。这可能以多种方式发生,例如:
\citet{bibcode}
\citep{bibcode}
\citet{bibcode1,bibcode2}
\citep[randomtext]{bibcode}
等
我正在尝试编译纯粹这些bibcodes的列表。如果单个容器中有多个bibcodes,则用逗号分隔。
目前,我正在使用:
sed -n 's:.*\cite.*{\(.*\)}.*:\1:p' sample.tex
它适用于某些情况,但不适用于所有情况。它似乎仍然被大括号的其他用途分散注意力,并且会拾取大量不必要的文本。
对此事的任何帮助都将受到高度赞赏。
提前谢谢。
答案 0 :(得分:1)
假设每行上只有一个引号,你可以调整你的正则表达式:
s:.*\\cite[^{]*{\([^}]*\)}.*:\1:p
答案 1 :(得分:0)
这适用于您提供的示例输入:
$ cat tst.awk
BEGIN { FS="[{},]" }
/\\cite/ {
for (i=2;i<NF;i++) {
if (!seen[$i]++) {
print $i
}
}
}
$ awk -f tst.awk file
bibcode
bibcode1
bibcode2
如果您的真实输入比那更复杂/难以解析,那么请更新您的问题以显示一些输入,以更准确地演示您的问题以及您正在寻找的相关输出。