SO Stinks
SO Stinks

Reputation: 3408

What the most efficient way to grab the bibliograpy name from a latex file via unix shell commands?

I am trying to write a shell script that compiles a latex source. I wish to grab the name of the bibliography file which is contained in a command like:

\bibliography{filename}

I need to save "filename" to a shell variable. My solution to this (in tcsh) is dreadfully embarrassing:

set bioliography=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}'

This breaks down as:

  1. do not show commented lines in the latex source
  2. grab those lines containing a valid bibliography tag
  3. use only the last one (in case for some reason multiple ones are defined)
  4. get rid of the curly braces
  5. set what is left to the shell variable.

Surely there's an elegant way of doing this that I'm overlooking. Can you wow me? I already have a working command, so this is merely in the name of beauty and shell wizardry.

Upvotes: 0

Views: 43

Answers (1)

Norman Ramsey
Norman Ramsey

Reputation: 202465

Rule 1: always write shell scripts using Bourne family shells, not csh family shells.

It's easier to pull the info from the .aux file. Here I'll use an extra feature of bash to chop the .tex off the end of the filename:

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

grep '^.bibdata{' "$auxfile" | sed 's/.*{//;s/}.*//'

Upvotes: 1

Related Questions