在Bash中使用cat和grep命令

问题描述 投票:0回答:5

我在尝试实现此bash命令时遇到问题:

连接当前目录中的所有文本文件,这些文件在文件的文本中至少出现一次单词BOB(在任何情况下)。

使用cat命令然后使用grep查找单词BOB的出现是否正确?

cat grep -i [BOB] *.txt > catFile.txt
bash shell grep cat
5个回答
5
投票

要正确处理带有空格字符的文件名:

grep --null -l -i "BOB" *.txt | xargs -0 cat > catFile.txt

2
投票

您的问题是需要将grep的文件名作为内联函数传递给cat

cat $(grep --null -l -i "BOB" *.txt ) > catFile.txt
  • $(.....)处理内联执行
  • -l只返回匹配的东西的文件名

1
投票

你可以使用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

0
投票

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

bob

0
投票

您还可以使用以下命令,该命令必须从包含grep -il "BOB" * 文件的目录运行。

BOB
  • grep -il BOB *.in | xargs cat > BOB_concat.out 是用于在-i中设置grep的选项
  • case insensitive mode将仅用于输出包含作为grep参数提供的模式的文件名
  • -l用于查找目录中的所有输入文件(应该适应您的文件夹内容)
  • 然后将命令的结果传递给*.in,以便构建cat将用于生成文件串联的参数。

假设:

  • 您的文件夹只包含名称中没有奇怪字符的文件(例如空格)
© www.soinside.com 2019 - 2024. All rights reserved.