在Bash

时间:2017-12-17 22:39:17

标签: bash shell grep cat

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

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

使用cat命令然后使用grep找到单词BOB的出现位置对我来说是否正确?

cat grep -i [BOB] *.txt > catFile.txt

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

您的问题是需要将<?xml version="1.0" encoding="UTF-8"?> <graphml> <graph id="G" edgedefault="directed"> <node id="n0"/> <node id="n1"/> <node id="n2"> <graph id="n2::" edgedefault="directed"> <node id="n2::n0"/> <node id="n2::n1"> <graph id="n2::n1::" edgedefault="directed"> <node id="n2::n1::n0"/> <node id="n2::n1::n1"/> <node id="n2::n1::n2"/> <edge id="e0" source="n2::n1::n1" target="n2::n1::n0"/> <edge id="e1" source="n2::n1::n2" target="n2::n1::n1"/> </graph> </node> <node id="n2::n2"/> <edge id="e2" source="n2::n1" target="n2::n0"/> <edge id="e3" source="n2::n2" target="n2::n1"/> </graph> </node> <edge id="e4" source="n1" target="n0"/> <edge id="e5" source="n1" target="n2::n1"/> <edge id="e6" source="n0" target="n2"/> </graph> </graphml> 的文件名作为内联函数传递给grep

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

答案 2 :(得分:1)

您可以将find-exec

一起使用
find -maxdepth 1 -name '*.txt' -exec grep -qi 'bob' {} \; \
    -exec cat {} + > catFile.txt
  • -maxdepth 1确保您不会搜索比当前目录更深的内容
  • -name '*.txt'说要查看以.txt结尾的所有文件 - 对于目录.txt结尾的情况,您可以添加{ {1}}仅查看文件
  • -type f为找到的每个-exec grep -qi 'bob' {} \;文件运行grep。如果文件中有.txt,则退出状态为零,并执行下一个指令。 bob确保grep是静默的。
  • -q在包含-exec cat {} +
  • 的所有苍蝇上运行cat

答案 3 :(得分:0)

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

grep -il "BOB" *

答案 4 :(得分:0)

You can also use the following command that you must run from the directory containing your BOB files.

grep -il BOB *.in | xargs cat > BOB_concat.out
  • -i is an option used to set grep in case insensitive mode
  • -l will be used to output only the filename containing the pattern provided as argument to grep
  • *.in is used to find all the input files in the dir (should be adapted to your folder content)
  • then you pipe the result of the command to xargs in order to build the arguments that cat will use to produce your file concatenation.

HYPOTHESIS:

  • Your folder does only contain files without strange characters in their name (e.g. space)