0

我正在尝试编写一个编译乳胶源的 shell 脚本。我希望获取包含在以下命令中的参考书目文件的名称:

\参考书目{文件名}

我需要将“文件名”保存到 shell 变量中。我对此的解决方案(在 tcsh 中)非常尴尬:

设置传记=grep -v -E "[[:blank:]]*%[[:blank:]]*" poltheory.tex | grep -E "\\bibliography{[A-Za-z0-9_\.]*}" | tail -1 | sed 's/\\bibliography//' | tr -d { | tr -d } | awk '{print $1}'

这分解为:

  1. 不要在乳胶源中显示注释行
  2. 抓住那些包含有效书目标签的行
  3. 只使用最后一个(如果由于某种原因定义了多个)
  4. 摆脱花括号
  5. 将剩下的内容设置为 shell 变量。

当然,我忽略了一种优雅的方法。你能让我惊叹吗?我已经有一个工作命令,所以这仅仅是以美容和外壳魔法的名义。

4

1 回答 1

1

规则 1:始终使用 Bourne 系列 shell 编写 shell 脚本,而不是 csh 系列 shell。

从 .aux 文件中提取信息更容易。在这里,我将使用 bash 的一个额外功能将 .tex 从文件名的末尾删除:

#!/bin/sh
texfile="$1"
auxfile="${texfile%.tex}.aux"

grep '^.bibdata{' "$auxfile" | sed 's/.*{//;s/}.*//'
于 2010-06-07T01:10:05.457 回答