Bash 将LaTeX语句的内容传递给命令
我可以用 (我无法让lookbehinds在Bash 将LaTeX语句的内容传递给命令,bash,shell,xargs,Bash,Shell,Xargs,我可以用 (我无法让lookbehinds在grep中工作,因此管道通过sed。这给了我一个文件名列表,每行一个。我现在想将这些文件传递给aspell。但是aspell只接受一个文件名作为参数,所以我不能在最后加上|xargs aspell-c 我读过,但那是通过xargs逐行读取文件。那么如何让它逐行从sed的输出中读取呢?我认为xargs-L 1应该满足您的需要: grep -P "\\\\include{" Thesis_master.tex | \ sed -n -e"s/\\\\inc
grep
中工作,因此管道通过sed
。这给了我一个文件名列表,每行一个。我现在想将这些文件传递给aspell
。但是aspell
只接受一个文件名作为参数,所以我不能在最后加上|xargs aspell-c
我读过,但那是通过
xargs
逐行读取文件。那么如何让它逐行从sed
的输出中读取呢?我认为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
从sed
管道每行调用aspell
一次
由于
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
命令,该命令始终将0退出代码返回给xargs。grep配方为:
grep -oP '\\include{\K.+?(?=})' latex.file | xargs aspell ...
如果您显示您的输入数据,那么我们可能建议您进行查找also@anubhava,谢谢:示例行是
\include{chap_-theory/chap_-theory}%
我认为开头是{
造成了很多麻烦-我应该还是不应该逃避它,如果是这样的话,如何逃避?在通过sed之前,我尝试了很多事情-我需要做这些事情来附加“.tex”我认为对于lookback,使用grep-P
和perl正则表达式(假设GNU grep)@glennjackman谢谢,我想我做了,但现在在我的命令历史记录中找不到这些尝试来检查-我可能做了其他错误。因此,现在可以使用查找功能,但当然是grep
(默认情况下)打印整行。我相信您现在正试图解决aspell关闭时出现的问题,退出代码为255,没有错误消息!您可以通过将命令更改为类似于xargs-L 1 echo aspell-c
的命令来调试xargs
命令。这样,xargs将有效地回显每个命令,而不是执行它。您可以然后可以手动运行回显命令并找出它们失败的原因。我只是尝试了一下--谢谢--我得到了aspell-c chap_-Theory/chap_-Theory.tex
等。如果我复制粘贴或重新键入命令,但不是从xargs中复制,则可以工作。同样,如果我将Q中的sed输出重定向到一个文件tmp.txt,将其剥离到一行,然后cat tmp。txt | xargs aspell-c
它给出了相同的行为-我想我可能需要进行与aspell相关的挖掘。在xargs
手册页中:“如果[…],xargs实用程序立即退出(不处理任何进一步的输入),或者实用程序调用退出,值为255。”@ChrisH查看我的编辑,了解防止xargs提前退出的可能方法\K
对我来说是新的-它在执行任务时似乎比查找更容易。特别是当您需要可变宽度查找时,这(?
grep -oP '\\include{\K.+?(?=})' latex.file | xargs aspell ...