Josef Klimuk Asked: 2018-08-02 06:21:34 +0800 CST2018-08-02 06:21:34 +0800 CST 2018-08-02 06:21:34 +0800 CST 不明确的重定向,grep 命令 772 这是一本 Linux 教科书中的练习:举一个输入和输出重定向的例子。我在网上找到了答案: grep \$Id < *.c > id_list 但是这个 *.c 似乎是问题所在。这个答案可以解决吗? command-line bash grep 2 个回答 Voted steeldriver 2018-08-02T08:28:58+08:002018-08-02T08:28:58+08:00 由于 grep 可以从名称作为参数传递给它的文件中读取,因此您根本不需要输入重定向: grep '$Id' -- *.c > id_list 默认情况下,如果*.c扩展为包含多个文件的列表,则将grep在每个匹配输出前加上找到它的文件名;如果您不想这样,请添加-h(或--no-filename)开关。 对于递归搜索,您可以使用该--include选项 grep -r --include='*.c' '$Id' . > id_list Best Answer Ravexina 2018-08-02T06:38:40+08:002018-08-02T06:38:40+08:00 使用 .将多个文件重定向到输入是不可能的<。(甚至输出,对于您应该使用的输出tee)。 为了演示一个工作示例,您可以使用以下内容:grep \$Id < 1.c > id_list. 您还可以使用“此处字符串”类型的重定向来获得您想要的。 grep <<< $(cat *.c) > out
由于 grep 可以从名称作为参数传递给它的文件中读取,因此您根本不需要输入重定向:
默认情况下,如果
*.c
扩展为包含多个文件的列表,则将grep
在每个匹配输出前加上找到它的文件名;如果您不想这样,请添加-h
(或--no-filename
)开关。对于递归搜索,您可以使用该
--include
选项使用 .将多个文件重定向到输入是不可能的
<
。(甚至输出,对于您应该使用的输出tee
)。为了演示一个工作示例,您可以使用以下内容:
grep \$Id < 1.c > id_list
.您还可以使用“此处字符串”类型的重定向来获得您想要的。