在Bash中使用cat和grep命令

在Bash中使用cat和grep命令,bash,shell,grep,cat,Bash,Shell,Grep,Cat,我在尝试实现此bash命令时遇到问题: 连接当前目录中的所有文本文件,在任何情况下,这些文件的文本中至少出现一个单词BOB 我使用cat命令然后使用grep查找BOB这个词的出现是否正确 您需要删除方括号 grep -il "BOB" * 您需要删除方括号 grep -il "BOB" * 您的问题是需要将grep的文件名作为内联函数传递给cat: cat $(grep --null -l -i "BOB" *.txt ) > catFile.txt $..... 处理内联执行 -l

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

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

我使用cat命令然后使用grep查找BOB这个词的出现是否正确


您需要删除方括号

grep -il "BOB" *

您需要删除方括号

grep -il "BOB" *

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

cat $(grep --null -l -i "BOB" *.txt ) > catFile.txt
$..... 处理内联执行 -l只返回匹配内容的文件名
您的问题是需要将grep的文件名作为内联函数传递给cat:

cat $(grep --null -l -i "BOB" *.txt ) > catFile.txt
$..... 处理内联执行 -l只返回匹配内容的文件名
要正确处理带有空格字符的文件名,请执行以下操作:

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

要正确处理带有空格字符的文件名,请执行以下操作:

grep --null -l -i "BOB" *.txt | xargs -0 cat > catFile.txt
您可以将find与-exec一起使用:

-maxdepth 1确保搜索深度不超过当前目录 -名称“*.txt”表示查看所有以.txt结尾的文件–如果还有一个以.txt结尾的目录,则可以添加-type f以仅查看文件 -执行官grep-qi'bob'{}\;为找到的每个.txt文件运行grep。如果bob在文件中,则退出状态为零,并执行下一个指令-确保grep是静默的。 -exec cat{}+在包含bob的所有文件上运行cat 您可以将find与-exec一起使用:

-maxdepth 1确保搜索深度不超过当前目录 -名称“*.txt”表示查看所有以.txt结尾的文件–如果还有一个以.txt结尾的目录,则可以添加-type f以仅查看文件 -执行官grep-qi'bob'{}\;为找到的每个.txt文件运行grep。如果bob在文件中,则退出状态为零,并执行下一个指令-确保grep是静默的。 -exec cat{}+在包含bob的所有文件上运行cat
您还可以使用以下命令,该命令必须从包含BOB文件的目录中运行

-i是用于在不区分大小写模式下设置grep的选项 -l将仅用于输出包含作为参数提供给grep的模式的文件名 *.in用于查找目录中的所有输入文件,这些文件应适合您的文件夹内容 然后将命令的结果通过管道传输到xargs,以便构建cat将用于生成文件连接的参数。 假设:

您的文件夹只包含名称中没有奇怪字符(例如空格)的文件
您还可以使用以下命令,该命令必须从包含BOB文件的目录中运行

-i是用于在不区分大小写模式下设置grep的选项 -l将仅用于输出包含作为参数提供给grep的模式的文件名 *.in用于查找目录中的所有输入文件,这些文件应适合您的文件夹内容 然后将命令的结果通过管道传输到xargs,以便构建cat将用于生成文件连接的参数。 假设:

您的文件夹只包含名称中没有奇怪字符(例如空格)的文件
这不是唯一的问题。您可能想进一步讨论如何将cat与grep结合起来,这不是唯一的问题。您可能想进一步讨论如何将cat与grep结合起来的问题。除非文件名包含空格或其他shell活动字符,否则这很好。更可靠的方法是将grep-null与xargs-null结合使用。$somebash命令将在处理该行时执行该代码。因此,在这里,它将获取paren中发生的所有输出,并将其传递给cat,之后cat的输出将直接使用>。除非文件名包含空格或其他shell活动字符,否则这是好的。更可靠的方法是将grep-null与xargs-null结合使用。$somebash命令将在处理该行时执行该代码。因此,这里它将获取paren中发生的所有内容的输出,并将其传递给cat,之后cat的输出将指向>。正则表达式[BOB]匹配一个单个字符,该字符可以是方括号内的B或O重复项,但被忽略。如果您有任何与模式匹配的文件名,则shell将根据与glob pattern(而不是正则表达式)稍有不同的规则,用匹配文件名列表替换[BOB]。cat grep不运行两个命令;它使用参数grep运行cat,这将是一个错误,除非当前目录中有一个名为grep的文件与cat的其他参数连接。正则表达式[BOB]匹配的单个字符可以是B或O,方括号内的重复字符将被忽略。如果您有任何与模式匹配的文件名,则shell将不加引号地将[BOB]替换为 匹配文件名,根据稍微不同的规则glob模式,而不是正则表达式。cat grep不运行两个命令;它使用参数grep运行cat,这将是一个错误,除非当前目录中有一个名为grep的文件与cat的其他参数连接。