基本上有两种选择:shell命令替换和xargs
。 Brian Agnew刚才写到前者。 xargs
是一个实用程序,它将stdin转换为要执行的命令的参数。所以,你可以运行
ls | xargs -n1 -J % grep -- % PathOfFileToBeSearched
,它将,由ls
每个输出文件,运行grep -e filename PathOfFileToBeSearched
通过ls
您指定的其他文件中到grep的文件名输出。这是一个不寻常的调用;通常用于在命令末尾添加一个或多个参数,而在此应该在特定位置添加一个参数,所以我使用-n
和-J
参数来排列该参数。比较常见的用法是像
ls | xargs grep -- term
由ls
为term
搜索所有的文件输出。虽然,当然,如果你只是想在当前目录下的文件,您可以在此更简单地没有管道:
grep -- term *
,同样在颠倒配置,
for filename in *; do
grep -- "[email protected]" PathOfFileToBeSearched
done
还有一个重要xargs
警告:空白由ls
生成的文件名中的字符将不会被处理得太好。要做到这一点,只要你有GNU工具,你可以用find
来代替。
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 -n1 -J % grep -- % PathOfFileToBeSearched
使用NUL字符分隔的文件名,而不是空白