【问题标题】:How to search in files for string?如何在文件中搜索字符串?
【发布时间】:2014-08-23 09:24:37
【问题描述】:

如何使用 grep 检查所有文件中字符串的可用性?

我尝试在文件中搜索一个字符串,我只需要一个输出。

问题:我在一个数组中有很多字符串,每个字符串都必须单独搜索。

我想知道字符串存在于哪个文件中。

感谢您的所有回答!

【问题讨论】:

  • 您要 grep 哪些文件?你能把你的代码缩减到只剩下相关的部分吗?
  • “用 grep 检查”是什么意思?检查什么? grep 干什么?
  • 我尝试检查 /tmp/packages-puppy-* 中可用性的包。
  • 很难说什么,因为我们不知道什么包含/tmp/packages-puppy-*,什么包含/tmp/packages-install等等。因此无法判断您的脚本将如何反应。如果您提出这样的问题,您应该提供示例数据以获得可复制的测试用例...请阅读How to Ask。无论如何,您也可以使用bash -x scriptname.sh(或在您的脚本中使用set -x)来查看您的脚本是如何工作的。
  • 所以你在一个变量中有一个字符串,你想显示哪个文件也包含这个字符串?

标签: linux bash shell grep


【解决方案1】:

如果变量中有字符串:

search="string"

您可以使用grep -l 列出所有包含该字符串的文件:

grep -lFr "$search" /path/to/search

-F 开关表示搜索模式是固定字符串,而不是正则表达式。 -r 开关意味着 grep 对路径中的所有文件进行递归搜索。

如果您有要搜索的字符串数组:

search=( string1 string2 )

你可以使用这样的循环:

for s in "${search[@]}"; do 
    echo "first file containing $s"
    grep -lFr "$s" . | head -n 1
done

head 的使用意味着只打印包含该字符串的第一个文件。

【讨论】:

  • 感谢您的回答和解释。
  • 我没有投反对票,但我会尽力解释。首先,不清楚你在问什么。您发布了一个很长的脚本,但没有人知道问题出在哪里。现在你已经删除了所有的脚本,看起来你还没有尝试任何东西。一个好的问题清楚地解释了你想要做什么,展示你已经尝试了什么,并清楚地说明问题是什么。也许您应该尝试编辑此问题,以便它包含您尝试做的事情的简短示例,并准确解释问题所在。然后人们可能会支持它。
【解决方案2】:

你的问题主要是因为在你的(现已删除的)脚本中你使用了

grep -n -w "$name" /tmp/packages-puppy-*
                        ^ - lowercase "p"

在 Dropbox 中,有些文件名带有大写“P”,有些带有小写“p”。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2012-05-07
    • 2011-06-23
    • 1970-01-01
    • 2011-02-04
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多