【问题标题】:Grep to find a file that contains a string in a directorygrep 在目录中查找包含字符串的文件
【发布时间】:2013-07-06 00:29:15
【问题描述】:

我正在尝试熟悉终端的基础知识。我想在我的 CMS 网站中找到包含我的 Google Analytics 跟踪代码“gaq”作为搜索字符串的文件。

我的桌面上有一个文件夹,其中包含所有站点文件。

/用户/我的名字/桌面/网站

我打开终端试了一下

grep gaq /Users/myname/Desktop/website

grep gaq * /Users/myname/Desktop/website

我在 SO 和 Google 上进行了搜索,但互联网似乎挤满了 grep 的一些更高级的使用,涉及正则表达式和条件。

例如: Unix Command to List files containing string but *NOT* containing another string, How can I use grep to find a word inside a folder?.

我以为我已经找到了第二个示例问题的答案。我尝试了以下命令:grep -nr gaq* /Users/myname/Desktop/website

但这会返回许多结果,而且据我所知,我的搜索字符串并不完全准确匹配。

以下是 Google Analytics sn-p 的示例,通过查看 html 页面的源代码获取。我的目标是找到生成分析 sn-p 的文件,以便将其更新到新版本的 Google Analytics:

var _gaq = _gaq || [];
            _gaq.push(['_setAccount', 'UA-xxxxxxxx-1']);
            _gaq.push(['_trackPageview']);

所以我使用“gaq”作为字符串进行搜索。

我知道这听起来一定很基础,但对于 shell 的初学者来说,这很令人沮丧。

如何在目录 /Users/myname/Desktop/website 中搜索包含使用 grep 的分析代码的文件(返回文件而不是实际的文本段落)(假设 grep 是我应该使用的命令?)

【问题讨论】:

    标签: bash shell grep


    【解决方案1】:

    两个例子:

        grep -nr '/users/myname/Desktop/website' -e "gaq"
        grep -nrw '/users/myname/Desktop/website' -e "gaq"
    

    选项的含义:

    -n, --行号 在其输入文件中使用从 1 开始的行号为每行输出添加前缀。 (-n 由 POSIX 指定。)

    -r, --recursive 递归读取每个目录下的所有文件,仅当它们在命令行上时才遵循符号链接。这相当于 -d 递归选项。

    -w, --word-正则表达式 仅选择那些包含构成整个单词的匹配项的行。测试是匹配的子字符串必须要么在行首,要么前面有一个非单词 构成性状。同样,它必须位于行尾或后跟非单词组成字符。构成单词的字符是字母、数字和 下划线。

    【讨论】:

      【解决方案2】:

      来源:man grep

      --files-with-matches-l 有一个选项

      grep -Rl  gaq /Users/myname/Desktop/website
      

      【讨论】:

        猜你喜欢
        • 2018-10-12
        • 2020-02-18
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 2021-10-11
        • 2020-08-05
        • 2021-09-11
        • 2017-02-12
        相关资源
        最近更新 更多