在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的所有苍蝇上运行q​​azxswpoi
另一答案

你需要删除方括号......

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 <<

linux文件管理和 对bash的理解

grep 在打印之前等待更多行[重复]

文本处理工具作业

Bash-在每个grep对应关系上运行命令而不停止尾部-n0 -f

重写 bash 命令以符合 ShellCheck