我想找到一个bash命令,可以让我在一个目录中grep每个文件,并将grep的输出写入单独的文件。我猜应该做类似于这样的事情:
ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out"
据我所知,xargs不支持双引号。如果我移除了双引号,则该命令将把整个命令的输出重定向到一个名为'{}'.out的单个文件中,而不是一系列单独的文件。
有人知道如何使用xargs实现这一点吗?我只是用grep场景作为示例来说明我在使用xargs时遇到的问题,因此任何不使用xargs的解决方案对我来说都不太适用。
-0
参数,xargs
命令会在处理文件名时将其中的空格、引号和反斜杠等字符打散。你应该放弃使用xargs
命令,并采用 Bash 循环语句来遍历每一行:while read line; do <command> "$REPLY"; done < file-with-lines
,或者通过管道符将输出作为输入传递给while
命令。 - lhunathxargs
输出的,这并不总是涉及解析ls
或使用sh -c
。这根本没有回答问题,但它是该问题的第一个谷歌搜索结果,只会增加混乱。 - pandasaucexargs -I {} sh -c'grep ABC "$1">"$1.out"'--{}
的详细解释或链接? 尤其是嵌套(双)引号的规则和末尾的“--”符号。谢谢。 - Scott Yangsh test.sh
)时,脚本名称被分配给$0,第一个参数被分配给$1,以此类推。因此,将相同的命令保存在脚本中并执行,最终会导致所有参数都被移位。使用--(或_、turnip)作为丢弃变量,可以使您统一从偏移量1开始设置参数。该命令也可以不使用--而是使用$0来代替。 - Derek Greer