在Bash中使用cat和grep命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Bash中使用cat和grep命令相关的知识,希望对你有一定的参考价值。
我在尝试实现此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将用于生成文件串联的参数。
假设:
- 您的文件夹只包含名称中没有奇怪字符的文件(例如空格)
以上是关于在Bash中使用cat和grep命令的主要内容,如果未能解决你的问题,请参考以下文章
如何使 cat 和 grep 在 c 中的第一个和第二个管道中工作,就像 bash 中的 heredoc <<