grep --exclude 不起作用

爱被打了一巴掌 2023-01-10 10:28 299阅读 0赞

用 grep 查找的时候,如果想在查找范围中排除掉某个目录和文件,怎么做?

很简单,用 —exclude=xxxx 或者 —exclude-dir=xxxx(用于目录)

举例子

  1. $ grep 1111 -r .
  2. ./a.txt:1111
  3. ./b.txt:1111111
  4. ./c.txt:11111222221

假如要排除掉文件 a.txt

  1. $ grep 1111 --exclude=a.txt -r .
  2. ./b.txt:1111111
  3. ./c.txt:11111222221

假如要排除掉当前目录

  1. $ grep 1111 --exclude-dir=./ -rn .

结果是啥也没有

需要注意的是:

  1. $ grep 1111 --exclude=./a.txt -rn .
  2. ./a.txt:1:1111
  3. ./b.txt:1:1111111
  4. ./c.txt:1:11111222221

这样写不起作用
一定要写成
$ grep 1111 --exclude=a.txt -r .

但是,如果当前目录下还有子目录,我们想排除子目录中的某个文件
比如

  1. $ find . -type f
  2. ./a.txt
  3. ./b.txt
  4. ./c.txt
  5. ./ss/s.txt // 假设要排除这个

先试试用 —exclude 选项

  1. $ grep 1111 --exclude="ss/s.txt" -rn .
  2. ./a.txt:1:1111
  3. ./b.txt:1:1111111
  4. ./c.txt:1:11111222221
  5. ./ss/s.txt:1:11116666
  6. $ grep 1111 --exclude="./ss/s.txt" -rn .
  7. ./a.txt:1:1111
  8. ./b.txt:1:1111111
  9. ./c.txt:1:11111222221
  10. ./ss/s.txt:1:11116666
  11. learner@ubt:/mnt/hgfs/vm_share/grep_test$

不灵了。

这可怎么办呢?
各种尝试,都不行,最后试出了这样的方法:

  1. $ find . -type f ! -path "./ss/s.txt" | xargs grep '1111'
  2. ./a.txt:1111
  3. ./b.txt:1111111
  4. ./c.txt:11111222221

解释一下:
find . -type f 表示查找当前目录下的所有文件,含子目录
-path "./ss/s.txt" 表示用 find 查找的时候要排除掉的文件(可以用正则表达式) “./ss/s.txt”
xargs 表示把 find 命令的结果作为参数传递给 grep

【End】

发表评论

表情:
评论列表 (有 0 条评论,299人围观)

还没有评论,来说两句吧...

相关阅读

    相关 v-show作用

    当v-show不起作用,很大一部分是因为该标签设置了display属性样式如display: flex,该样式的优先级高于v-show的display:none/display

    相关 jstl标签库作用

    开始的时候是JDK1.6+JSTL1.2,一切都很正常,所以后来换项目用JDK1.5+JSTL1.0这样的组合,换成JSTL1.0后,问题就来了,JSP页面的EL标签直接成字符

    相关 height:100%作用

    近日小伙伴们,在布局的是需要用到将某个div全屏铺满!无论怎么使用height属性,都无法满足自己的要求!让我回忆起自己第一次遇到这样的布局需求,也绕了不少弯路!今天就记录一下