`

Linux下查找某文件夹下某类文件的内容

 
阅读更多

今天有个需求:需要查找在某个工程下面的所有js文件和vm文件中是否包含某个特定的关键字$a。

 

自己最直观的想法,使用find实现。

 

find . -name "*.js" -or -name "*.vm" | xargs grep "\b$a\b"

这里很容易在-or参数后面忘记再写一次-name参数,我开始就是忘记了,导致语法就有问题,linux不认!

 

后来请教一位同事时,人家给出了直接grep的解法,相当不错,记录一下:

grep "\b$a\b" --include=\*.{js,vm} -r .

这里,--include参数表明需要grep哪类文件,-r表示递归搜索特定的文件夹,千万别忘记最后的那个“点”,用于表明在当前文件夹下搜索。  

 

另外,还有个需求,要做多少关键字被匹配到的记录。其实本质上是需要个shell下的计数器。

不过这个小语法有被我写错了,必须记录一下了,汗。

因为使用的是bash,所以直接使用((i++))做自增最方便了。不过这里的注意,自增变量i在(())双括号中是不用使用变量引用的$符号的,这个被我忽略的地方,也就错在这里了。。。

所以正确的写法类似于下面这样的:

i=0
#in for loop under some condition
((i++))
 
分享到:
评论
2 楼 hittyt 2012-10-05  
DiaoCow 写道
不错,学习了,但是LZ 我有个疑问:

grep "\b$a\b" --include=*.{js,vm} -r .

我感觉这样就行了应该就行了,不许要在多一个\


--exclude=GLOB
              Skip  files  whose  base  name  matches  GLOB  (using   wildcard
              matching).   A  file-name  glob  can  use  *,  ?,  and [...]  as
              wildcards, and \ to quote  a  wildcard  or  backslash  character
              literally.


不知道对否

嘿嘿,您的说法是对的。
这里的反斜杠更多的是语义上的说明后面跟了一个通配符,实际上没有实际意义,所以不写也是完全没问题的,相当于一个简单的正则处理,所以你的写法是没问题的,更简洁些:)
1 楼 DiaoCow 2012-09-19  
不错,学习了,但是LZ 我有个疑问:

grep "\b$a\b" --include=*.{js,vm} -r .

我感觉这样就行了应该就行了,不许要在多一个\


--exclude=GLOB
              Skip  files  whose  base  name  matches  GLOB  (using   wildcard
              matching).   A  file-name  glob  can  use  *,  ?,  and [...]  as
              wildcards, and \ to quote  a  wildcard  or  backslash  character
              literally.


不知道对否

相关推荐

    读取N个文件夹某些文件合并到一个文件夹

    这个过程可能涉及到文件的查找、选择、移动或复制。在这个场景中,我们将使用C++语言来实现这一功能,特别是针对那些指定的、位于多层文件夹结构中的文件。以下是一个详细的步骤和知识点讲解: 1. **文件系统操作**...

    C++遍历某文件夹某类扩展名的文件.docx

    在C++编程中,遍历特定文件夹并获取特定扩展名的文件是一项常见的任务,特别是在处理大量数据或进行文件操作时。这个例子中,我们看到一个简单的C++程序,它遍历指定目录下所有扩展名为".jpg"的文件。以下是对该程序...

    C++遍历某文件夹某类扩展名的文件.pdf

    在C++编程中,遍历特定文件夹并找出具有特定扩展名的文件是一项常见的任务,特别是在处理大量数据或资源的项目中。以下是如何使用C++实现这一功能的详细步骤和相关知识点: 首先,我们需要包含必要的头文件。在这个...

    Linux系统基本命令

    - 实战场景:批量处理某一类文件,例如备份所有文本文件。 - **diff**:比较两个文件的内容差异。 - 示例命令:`diff file1.txt file2.txt` - 作用:显示两个文本文件之间的不同之处。 - 实战场景:检查文件...

    C#搜索文字在文件及文件夹中出现位置的方法

    总的来说,这个C#程序提供了一种有效的方式,可以在Windows环境下模拟Linux的`grep`命令,方便地在文件或文件夹中搜索特定字符串。通过这种方式,开发者可以轻松地在大量文本数据中定位关键信息,这对于调试、日志...

    cmd操作命令和linux命令大全收集

    copy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件 copy ipadmin$svv.exe c: 或:copyipadmin$*.* 复制...

    光标自用光标自用光标自用光标自用光标自用

    文件夹可以嵌套,即一个文件夹内可以包含其他文件夹,形成层级结构,帮助用户更好地管理和查找文件。 自用通常指的是个人使用,不涉及共享或公共访问。在IT领域,这可能指个人电脑上的设置、软件安装或数据存储,...

    文件批量改名

    6. **用户界面**:批量改名工具通常具有直观的用户界面,用户可以通过输入新名称模板、选择文件夹或拖放文件来操作。这种设计使得即使是对编程不熟悉的用户也能轻松使用。 7. **安全性和备份**:在进行批量改名前,...

    vc++ 开发实例源码包

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    工作中常用的linux命令

    6.查找某文件中出现指定字符串的行 .................................................................................... 3 7.查看内存使用情况 ................................................................

    C++.zip,本人学习C++的部分代码

    10. **调试工具**:在Linux下,gdb是一个常用的调试工具,用于查找和修复程序中的错误。学会使用gdb可以极大地提高开发效率。 综上所述,这个压缩包中可能包含了上述知识点的应用实例,通过阅读和分析这些代码,...

    将vim改装成超级IDE环境

    在Linux环境下进行软件开发时,虽然有众多优秀的编辑器可以选择,但对于习惯于集成开发环境(IDE)的开发者而言,缺少一个像样的IDE可能会让编码体验大打折扣。本文旨在通过一系列的设置和插件的安装,将强大的文本...

    eclipse快捷键大全

    3. **刷新文件夹**:如果文件夹中的文件没有及时显示出来,可以选择该文件夹,然后选择 Refresh 来刷新文件夹的内容。 以上是 Eclipse 中的一些常用快捷键及其详细介绍,这些快捷键的合理运用可以显著提升开发效率...

    Python库 | v2.theme-2.1-py2.4.egg

    通常,一个Python库可能包括`.py`(Python源代码)、`.pyc`(编译后的Python字节码)、`LICENSE`(许可文件)、`README`(说明文档)等文件,但在这个案例中,所有的内容都被打包在一个`.egg`文件里。 使用这样的...

Global site tag (gtag.js) - Google Analytics