这是 Linux 教科书上的一个练习:给出一个输入和输出重定向的例子。我在网上找到了一个答案:
grep \$Id < *.c > id_list
但是这个 *.c 似乎是问题所在。这个答案能解决吗?
答案1
由于 grep 可以读取传递给它的文件名称作为参数的文件,因此这里根本不需要输入重定向:
grep '$Id' -- *.c > id_list
默认情况下,如果*.c
扩展为多个文件的列表,grep
则会在每个匹配输出前加上找到该文件的文件名作为前缀;如果您不想要这样,请添加-h
(或--no-filename
) 开关。
对于递归搜索,您可以使用--include
选项
grep -r --include='*.c' '$Id' . > id_list
答案2
无法使用<
. 将多个文件重定向到输入(或者甚至是输出,对于输出您应该使用tee
)。
为了演示一个工作示例,您可以使用类似以下内容:grep \$Id < 1.c > id_list
。
您还可以使用“此处字符串”类型的重定向来获取您想要的内容。
grep <<< $(cat *.c) > out