精华内容
下载资源
问答
  • grep 排除多个关键词

    2021-05-16 17:25:00
    之前利用grep -v匹配排除多个关键词时,需要写多个grep,现在发现一种更简单的方法:如:当前目录有a\b\c\d四个文件及,排除包含a、b、c的行。[root@svn tmp]# ls -l总计 1516drwxr-xr-x 2 root root 4096 01-07 12:...

    之前利用grep -v匹配排除多个关键词时,需要写多个grep,现在发现一种更简单的方法:

    如:当前目录有a\b\c\d四个文件及,排除包含a、b、c的行。

    [root@svn tmp]# ls -l

    总计 1516

    drwxr-xr-x 2 root   root     4096 01-07 12:44 a

    drwxr-xr-x 2 root   root     4096 01-07 12:44 b

    drwxr-xr-x 2 root   root     4096 01-07 12:44 c

    drwxr-xr-x 2 root   root     4096 01-07 12:44 d

    srwxr-xr-x 1 root   root        0 2012-05-07 mapping-root

    -rw-rw-r– 1 zabbix zabbix 986942 01-07 12:46 zabbix_agentd.log

    -rw-rw-r– 1 zabbix zabbix      4 01-07 08:37 zabbix_agentd.pid

    -rw-rw-r– 1 zabbix zabbix 530756 01-07 12:47 zabbix_server.log

    -rw-rw-r– 1 zabbix zabbix      4 01-07 08:37 zabbix_server.pid

    [root@svn tmp]#ls -l | grep -v “a\|b\|c”总计 1516

    drwxr-xr-x 2 root   root     4096 01-07 12:44 d

    专注于 服务器运维与web架构

    E-mail:venus#rootop.org

    展开全文
  • 在本文中,我们将向您展示在使用grep搜索时如何排除一个或多个单词,模式或目录。内容有:排除单词和模式、及排除目录和文件。前言grep是一种功能强大的命令行工具,用于在一个或多个输入文件中搜索与正则表达式匹配...

    在本文中,我们将向您展示在使用grep搜索时如何排除一个或多个单词,模式或目录。内容有:排除单词和模式、及排除目录和文件。

    018aef6a0fb6bc8a205b83c6eaf88b7e.png

    前言

    grep是一种功能强大的命令行工具,用于在一个或多个输入文件中搜索与正则表达式匹配的行,并将每条匹配的行写入标准输出。

    排除单词和模式

    要仅显示与搜索模式不匹配的行,请使用-v(或--invert-match)选项。

    例如,要打印不包含字符串nologin的行,可以使用:

    grep -wv nologin /etc/passwd

    返回:

    root:x:0:0:root:/root:/bin/bash

    git:x:994:994:git daemon user:/:/usr/bin/git-shell

    ywnz:x:1000:1000:ywnz:/home/ywnz:/bin/bash

    -w选项告诉grep仅返回指定字符串是整个单词(由非单词字符括起来)的那些行。

    默认情况下,grep区分大小写。这意味着将大写和小写字符视为不同的字符。要在搜索时忽略大小写,请使用-i选项调用grep。

    如果搜索字符串包含空格,则需要将其用单引号或双引号引起来。

    要指定两个或多个搜索模式,请使用-e选项:

    grep -wv -e nologin -e bash /etc/passwd

    您可以根据需要多次使用-e选项。

    排除多个搜索模式的另一种选择是使用OR运算符|来加入模式。

    以下示例显示不包含字符串nologin或bash的行:

    grep -wv 'nologin\|bash' /etc/passwd

    GNU grep支持三种正则表达式语法,Basic、Extended和Perl兼容。默认情况下,grep将模式解释为基本的正则表达式,其中的元字符(例如|)失去其特殊含义,您必须使用其反斜线版本。

    如果使用扩展的正则表达式选项-E,那么运算符|不应逃脱,如下所示:

    grep -Ewv 'nologin|bash' /etc/passwd

    您可以指定不同的可能匹配项,这些匹配项可以是文字字符串或表达式集。在下面的示例中,排除了字符串游戏在行的开始处发生的行:

    grep -v "^games" file.txt

    可以使用grep通过管道过滤命令的输出,并且只有与给定模式匹配的行才会打印在终端上。

    例如,要打印出系统上所有正在运行的进程(以用户“root”身份运行的进程除外),可以过滤ps命令的输出:

    ps -ef | grep -wv root

    排除目录和文件

    有时,当使用-r或-R选项执行递归搜索时,您可能希望从搜索结果中排除特定目录。

    -r或-R选项之间的主要区别在于,当使用大写R调用grep时,它将跟随所有符号链接。

    要从搜索中排除目录,请使用--exclude-dir选项。排除目录的路径是相对于搜索目录的。

    这是一个示例,显示了如何在/etc内的所有文件(不包括/etc/pki目录)中搜索字符串ywnz:

    grep -R --exclude-dir=pki ywnz /etc

    要排除多个目录,请将排除的目录括在大括号中,并用逗号分隔,两个空格之间不能有空格。

    例如,要在Linux系统中查找包含字符串“gnu”的文件(不包括proc、boot和sys目录),请运行:

    grep -r --exclude-dir={proc,boot,sys} gnu /

    使用通配符匹配时,可以排除基本名称与--exclude选项中指定的GLOB匹配的文件。

    在下面的示例中,我们正在搜索当前工作目录中的所有文件以查找字符串ywnz,但不包括以.png和.jpg目录结尾的文件:

    grep -rl --exclude=*.{png,jpg} ywnz *

    结论

    在Linux系统中使用grep命令可以在搜索文件时排除模式和目录,实现起来也简单。

    相关主题

    展开全文
  • linux - 如何从grep -R中排除目录?我想遍历所有子目录,除了“node_modules”目录。TIMEX asked 2018-12-31T01:18:05Z12个解决方案856 votes最新版本的GNU Grep(> = 2.5.2)提供:--exclude-dir=dir从递归目录...

    linux - 如何从grep -R中排除目录?

    我想遍历所有子目录,除了“node_modules”目录。

    TIMEX asked 2018-12-31T01:18:05Z

    12个解决方案

    856 votes

    最新版本的GNU Grep(> = 2.5.2)提供:

    --exclude-dir=dir

    从递归目录搜索中排除与模式ack匹配的目录。

    所以你可以这样做:

    grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

    有关语法和用法的更多信息,请参阅

    文件和目录选择的GNU手册页

    相关的StackOverflow答案使用grep --exclude / - include语法不要浏览某些文件

    对于较旧的GNU Greps和POSIX Grep,请按照其他答案中的建议使用ack。

    或者只使用ack(编辑:或银色搜索者)并完成它!

    Johnsyweb answered 2018-12-31T01:20:07Z

    161 votes

    解决方案1(结合.gitignore和grep)

    此解决方案的目的不是为了处理.gitignore性能,而是为了展示一个可移植的解决方案:还应该使用busybox或早于2.5的GNU版本。

    使用.gitignore,排除目录foo和bar:

    find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print

    然后结合.gitignore和非递归使用.gitignore,作为便携式解决方案:

    find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;

    解决方案2(递归使用.gitignore):

    您已经知道这个解决方案,但我添加它,因为它是最新且最有效的解决方案。 请注意,这是一种不太便携的解决方案,但更易于阅读。

    grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

    解决方案3(Ag)

    如果你经常搜索代码,Ag(The Silver Searcher)是一个比grep快得多的替代品,它是为搜索代码而定制的。 例如,它会自动忽略.gitignore中列出的文件和目录,因此您不必将相同的繁琐排除选项传递给grep或find。

    hornetbzz answered 2018-12-31T01:18:59Z

    61 votes

    如果要排除多个目录:

    “r”表示递归,“l”只打印包含匹配的文件名,“i”表示忽略大小写区别:

    grep -rli --exclude-dir={dir1,dir2,dir3} keyword /path/to/search

    示例:我想查找包含“hello”一词的文件。 我想搜索除proc目录,启动目录,sys目录和根目录之外的所有linux目录:

    grep -rli --exclude-dir={proc,boot,root,sys} hello /

    注意:上面的示例需要是root

    注2(根据@skplunkerin):请勿在{dir1,dir2,dir3}中的逗号后添加空格

    Azodium answered 2018-12-31T01:20:56Z

    19 votes

    这个语法

    --exclude-dir={dir1,dir2}

    由shell(例如Bash)而不是topdir/something/else扩展为:

    --exclude-dir=dir1 --exclude-dir=dir2

    引用会阻止shell扩展它,所以这不起作用:

    --exclude-dir='{dir1,dir2}'

    与topdir/something/else一起使用的模式与--exclude选项的手册页中描述的模式类型相同:

    --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.

    shell通常会尝试自己扩展这样的模式,所以为了避免这种情况,你应该引用它:

    --exclude-dir='dir?'

    您可以像这样使用花括号和引用排除模式:

    --exclude-dir={'dir?','dir??'}

    模式可以跨越多个路径段:

    --exclude-dir='some*/?lse'

    这将排除像topdir/something/else这样的目录。

    Derek Veit answered 2018-12-31T01:22:03Z

    13 votes

    经常使用这个:

    findDebugger.sh可与debugger(递归),.idea(忽略大小写)和.git(打印仅匹配部分行)一起使用。 要排除files使用--exclude并排除目录使用--exclude-dir。

    把它放在一起你会得到类似的东西:

    grep -rio --exclude={filenames comma separated} \

    --exclude-dir={directory names comma separated}

    描述它使它听起来比实际复杂得多。 用一个简单的例子更容易说明。

    例:

    假设我在调试会话期间显式设置字符串值findDebugger.sh的所有地方搜索当前项目,现在希望查看/删除。

    我写了一个名为findDebugger.sh的脚本,并使用debugger查找所有事件。 然而:

    对于文件排除 - 我希望确保忽略findDebugger.sh(这实际上有一个约为debugger的linting规则,因此应排除)。 同样,我不希望在任何结果中引用我自己的脚本。

    对于目录排除 - 我希望排除findDebugger.sh,因为它包含许多参考debugger的库,我对这些结果不感兴趣。 另外我只想省略.idea和.git隐藏目录,因为我不关心那些搜索位置,并希望保持搜索性能。

    所以这是结果 - 我创建了一个名为findDebugger.sh的脚本:

    #!/usr/bin/env bash

    grep -rio --exclude={.eslintrc,findDebugger.sh} \

    --exclude-dir={node_modules,.idea,.git} debugger .

    arcseldon answered 2018-12-31T01:23:20Z

    9 votes

    你可以尝试像grep -R search . | grep -v '^node_modules/.*'这样的东西

    DipSwitch answered 2018-12-31T01:23:41Z

    4 votes

    非常有用,特别是对于那些我们想要避免在“node_modules”内搜索的Node.js的人:

    find ./ -not -path "*/node_modules/*" -name "*.js" | xargs grep keyword

    Nestor Urquiza answered 2018-12-31T01:24:04Z

    2 votes

    这个适合我

    grep -R --exclude-dir=

    angelo.mastro answered 2018-12-31T01:24:32Z

    2 votes

    一个简单的工作命令:

    root/dspace# grep -r --exclude-dir={log,assetstore} "creativecommons.org"

    上面我在当前目录“dspace”中找到文本“creativecommons.org”并排除dirs {log,assetstore}。

    完成。

    Dung answered 2018-12-31T01:25:07Z

    1 votes

    find . ! -name "node_modules" -type d

    Jack answered 2018-12-31T01:25:22Z

    1 votes

    如果您正在使用git存储库中的代码并且.gitignore中有node_modules,则可以使用git grep。git grep搜索工作树中的跟踪文件,忽略.gitignore中的所有内容

    git grep "STUFF"

    0xcaff answered 2018-12-31T01:25:44Z

    0 votes

    更简单的方法是使用“grep -v”过滤结果。

    grep -i needle -R * | grep -v node_modules

    Morris answered 2018-12-31T01:26:13Z

    展开全文
  • 示例: grep -rn --exclude-dir=build_* --exclude-dir=kernel --exclude-dir=drivers --exclude=*.out 'abcdefg'

    示例:

    grep -rn --exclude-dir=.svn* --exclude-dir=src --exclude-dir=drivers --exclude=*.out 'abcdefg'

    展开全文
  • 结合查找和grep见superuser.com/q/66715/59933只需键入"man grep",您就会看到--排除,和--排除这里列出的dir选项--在这个问题的标题中,我假设您已经知道grep…如果您在Git存储库中大量使用代码,而node_modules在...
  • grep太罗嗦,用ack吧。源码搜索的不二之选~默认排除各种版本库,可以指定多种源文件类型。─(~/.cheat)(ruby-1.9.3-p547@rails3.1.1)─────────────────────────────────────...
  • 1.概述 例如需要排除 abc.txt 中的 mmm nnn grep -v 'mmm\|nnn' abc.txt 反向排除 grep -v '^mmm\|nnn' abc.txt
  • Linux下find一次查找多个指定文件或者排除某类文件,在 GREP 中匹配多个关键字的方法(1)Linux下find一次查找多个指定文件:查找a.html和b.htmlfind . -name "a.html" -name "b.html"find . -regex '.*\.txt\|.*\.doc...
  • 一,linux grep 搜索时排除指定的文件名,添加--exclude=文件名 二、下面我要过滤掉strings.xml文件,使用grep -rn about_settings --exclude=strings.xml目录
  • Here is an awk solution: $ grep sent grepTest_20140321.txt| awk '$0 > "2014-03-20 14:05:54"' 2014-03-20 14:05:54,038 [NfxAgent.... 2014-03-20 14:05:54,164 [NfxAgent.... 2014-03-20 14:05:54,298 ...
  • Linux下find一次查找多个指定文件或者排除某类文件,在 GREP 中匹配多个关键字的方法(1)Linux下find一次查找多个指定文件:查找a.html和b.html1.find . -name "a.html" -name "b.html"find . -regex '.*\.txt\|.*\....
  • grep 去除注释行和空行[root@www ~]# grep -v ^# /etc/vsftpd/vsftpd.conf |grep -v ^$anonymous_enable=YESlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_...
  • grep命令可以用来去掉符合条件的行答:√旅游资源的价值有答:历史文化价值 美学价值 科学价值 经济价值古人类演化的早期阶段的三个化石代表是答:原初人 地猿 撒海尔人不同历史时期哈勃常数的值是不同的。...
  • grep --exclude 不起作用

    2021-01-23 22:50:05
    grep 查找的时候,如果想在查找范围中排除掉某个目录和文件,怎么做? 很简单,用 --exclude=xxxx 或者 --exclude-dir=xxxx(用于目录) 举例子 $ grep 1111 -r . ./a.txt:1111 ./b.txt:1111111 ./c.txt:...
  • grep搜索的时候, 有时候需要剔除忽略某个文件夹或者文件 忽略文件夹out和文件夹tb/env/subs grep -nir topology * --exclude-dir=out --exclude-dir=tb/env/subs 忽略文件1.log grep -nir fail * --exclude=1....
  • 我经常会grep -n whatev文件找到我正在寻找的东西。 说输出是1234: whatev 15555: whatev 26643: whatev 3如果我想在1234和5555之间提取线条,是否有工具可以做到这一点? 对于静态文件,我有一个脚本,它执行文件的...
  • I have lines in a file which look like the following....... DisplayName="john" ..........where .... represents variable number of other fields.Using the following grep command, I am able to extract al...
  • /bin/bash NUM=$(ps -ef|grep -w main|grep -v grep|wc -l) if [ $NUM -eq 0 ];then echo "Oh!My God! It's broken! main is stoped!" else echo "Don't worry! main is running!" fi 检查脚本执行结果 [root@kevin ...
  • #查看日志中,包含“表名:”或者“包含SQL:”的行! cat pro.log | grep "^\(表名:\|SQL:\).*$" ...cat pro.log | grep "^\(表名:\|SQL:\).*$" | grep -v -i 'select' #查看日志中,将这部分日志追...
  • 李*),其中有一部分数据已经是这种形式的,有一部分数据是证件号码、电话号码类型的等等,类似下面的测试文件,我们需要做的是将中文名上面的sql语句过滤出来,且排除掉已经带有星号的结果的sql语句。如果手动一条一...
  • 参考来源:在linux系统如何grep过滤中,不包含某些字符串的命令 [root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 -c :计算找到 ...
  • 查日志的时候,经常会使用cat xxxx.log |grep yyyy命令,如果grep的时候,想排除某些字段,那么 是cat xxx.log |grep yyyy |grep -v ccc 1.1.从文件中查找字符grep “字符” [root@localhost .
  • grep 文本过滤工具。

    2021-08-21 16:02:28
    grep 命令是Linux系统... -v 显示不包含匹配文本的所有行(排除行)。 -n 显示匹配的行和行号。 -i 不区分大小写(只适用于单字符),默认情况下是区分大小写的。 -c 只统计匹配的行数,不是匹配的次数。 -o..
  • ·Path表示连接到套接口的其它进程使用的路径名 Netstat -tln 命令是用来查看linux的端口使用情况, netstat -a 查看所有的服务端口 netstat -an | grep 端口号 来检验下是不是已经打开了某某端口 service xxx ...
  • 显示行号|选择喜欢的代码风格默认GitHubDuneLakeSidePlateauVibrantBlueEightiesTranquilgrep 命令(Global Regular Expression Print)逐行处理...grep 命令安装:-bash: grep: command not found#Debianapt-get ins...
  • BSD grep指令详解

    2021-03-13 10:32:51
    grep是linux或者BSD重要的查找内容命令. 我们在以下目录结构做实验 . ├── a.txt └── mydir ├── InnerTextB.txt └── innerTextA.txt 1 directory, 3 files a.txt hello world HELLO World mydir/...
  • linux命令里,grep * 是什么意思?我也曾把光阴浪费甚至莽撞到视死如归然后因为爱上你而渴望长命百岁。就是grep后面只加一个*符号 比如: 某命令 |grep * 我知道grep本身是什任意一个字节 . 与重复字节 * 这两个符号...
  • 使用-v选项 $ps -ef |grep httpd |grep -v grep[root@openvas ~]# ps -ef |grep httpd |grep -v grep |sort -r -k 8 |tail -5 apache 19787 4416 0 16:29 ? 00:00:00 /usr/sbin/httpd apache...
  • 过滤 | grep 反向过滤 | grep -v
  • grep 的用法

    2021-03-22 11:17:14
    grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行grep -B 5 foo file 显示foo及前5行grep -A 5 foo file 显示foo及后5行grep(global search regular expression(RE) and print out the line,全面搜索...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,208
精华内容 13,683
关键字:

grep排除