5

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

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

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

我打开终端并尝试

grep gaq /Users/myname/Desktop/website

grep gaq * /Users/myname/Desktop/website

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

例如: Unix 命令列出包含字符串但 *NOT* 包含另一个字符串的文件如何使用 grep 在文件夹中查找单词?.

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

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

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

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

所以我使用“gaq”作为一个字符串来搜索。

我意识到这听起来一定很基础,但作为 shell 的初学者,这非常令人沮丧。

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

4

2 回答 2

4

两个例子:

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

选项的含义:

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

-r, --recursive 以递归方式读取每个目录下的所有文件,仅当它们位于命令行时才跟随符号链接。这等效于 -d 递归选项。

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

于 2016-02-12T21:36:22.177 回答
3

来源:man grep

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

grep -Rl  gaq /Users/myname/Desktop/website
于 2013-07-08T15:40:13.477 回答