Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将LaTeX语句的内容传递给命令_Bash_Shell_Xargs - Fatal编程技术网

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

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

我可以用

(我无法让lookbehinds在
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 ...