将LaTeX语句的内容传递给命令

时间:2014-03-28 19:06:59

标签: bash shell xargs

我可以从latex文件中提取所有\include语句的内容(并将“.tex”附加到每个语句中)

grep -P "\\\\include{" Thesis_master.tex |sed -n -e"s/\\\\include{/$1/" -e" s/}.*$/.tex/p"

(我无法在grep中使用lookbehinds,因此管道通过sed。这给了我一个文件名列表,每行一个。我现在想将这些文件传递给aspell。但是aspell只接受一个文件名作为参数,所以我不能在最后添加|xargs aspell -c

我已阅读this related question,但是从文件逐行读取xargs。那么如何让它逐行读取sed的输出?

2 个答案:

答案 0 :(得分:1)

我认为xargs -L 1应该做你需要的事情:

grep -P "\\\\include{" Thesis_master.tex | \
sed -n -e"s/\\\\include{/$1/" -e" s/}.*$/.tex/p" | \
xargs -L 1 aspell -c

(为了便于阅读,添加了反斜杠行续篇)

这会导致xargsaspell管道每行拨打sed一次。


由于您的aspell命令似乎以255代码退出,这会导致xargs停止。你可以通过做类似的事情来欺骗xargs而不退出:

grep -P "\\\\include{" Thesis_master.tex | \
sed -n -e"s/\\\\include{/$1/" -e" s/}.*$/.tex/p" | \
xargs -L 1 -I % bash -c "aspell -c %; true"

这将在子shell中运行aspell,然后是true命令,它始终向xargs返回0退出代码。

答案 1 :(得分:1)

grep食谱是:

grep -oP '\\include{\K.+?(?=})' latex.file | xargs aspell ...