我可以从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
的输出?
答案 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
(为了便于阅读,添加了反斜杠行续篇)
这会导致xargs
从aspell
管道每行拨打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 ...