我在尝试实现此bash命令时遇到问题:
连接当前目录中的所有文本文件,这些文件在文件的文本中至少出现一次单词BOB
(在任何情况下)。
使用cat
命令然后使用grep
查找单词BOB
的出现是否正确?
cat grep -i [BOB] *.txt > catFile.txt
要正确处理带有空格字符的文件名:
grep --null -l -i "BOB" *.txt | xargs -0 cat > catFile.txt
您的问题是需要将grep
的文件名作为内联函数传递给cat
:
cat $(grep --null -l -i "BOB" *.txt ) > catFile.txt
$(.....)
处理内联执行-l
只返回匹配的东西的文件名你可以使用find
和-exec
:
find -maxdepth 1 -name '*.txt' -exec grep -qi 'bob' {} \; \
-exec cat {} + > catFile.txt
-maxdepth 1
确保您不会搜索比当前目录更深的内容-name '*.txt'
说要查看以.txt
结尾的所有文件 - 如果还有一个目录以.txt
结尾,你可以添加-type f
只查看文件-exec grep -qi 'bob' {} \;
为找到的每个.txt
文件运行grep。如果bob
在文件中,则退出状态为零,并执行下一个指令。 -q
确保grep是沉默的。-exec cat {} +
在包含cat
的所有苍蝇上运行qazxswpoi你需要删除方括号......
bob
您还可以使用以下命令,该命令必须从包含grep -il "BOB" *
文件的目录运行。
BOB
grep -il BOB *.in | xargs cat > BOB_concat.out
是用于在-i
中设置grep
的选项case insensitive mode
将仅用于输出包含作为grep参数提供的模式的文件名-l
用于查找目录中的所有输入文件(应该适应您的文件夹内容)*.in
,以便构建cat将用于生成文件串联的参数。假设: