Linux系统中grep命令是一种强大的文本搜索工具,它能使用
正则表达式搜索文本,并把匹配的
行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
大多数grep版本是NFA规则引擎,与java一样。
1. 语法
grep [options] pattern [fileName...]
或
grep [options] [-e pattern | -f fileName] [fileName...]
一般使用第一种写法。
支持的常用options如下:
1.1 控制匹配pattern
-i, (全称: --ignore-case) : 正则内容忽略大小写。以行为单位显示,即使一行匹配到多个pattern也是
一行显示。
-v, (--ivert-match): 反检索,只显示不匹配的行,以行为单位显示。
-w, (--word-regexp): 把pattern当做
‘单词’精确匹配。比如匹配'is',那么'this'就不会被匹配到。
-x, (--line-regexp): 显示与指定模式
精确匹配而不含其他字符的行。比如匹配'error'则只匹配单独一行的'error',如果该行除了error之外还有其他字符则不算匹配。
1.2 控制匹配结果的输出pattern
-c, (--count): 之前的pattern默认输出结果都是以原始文本的行为单位显示。这里就不显示行内容,只显示匹配到的行数。
-m NUM, (--max-count=NUM):当匹配到的行数到达NUM行后,就终止匹配。如: grep -m 1 'error' software.test
-o, (--only-matching): 之前正常匹配到的行会把行内容全部输出,即使一行有多个匹配也是在一行内输出。这里
(1)只输出一行中匹配到的部分,
(2)如果匹配到多个部分则换行输出。 这一点很适合统计文件中某个单词之类的出现频率。
-n, (--line-number): 在匹配到的结果前面输出该行在原始文件中的行号。
-A NUM, (--after-context=NUM): 输出正常匹配结果外,再输出匹配行后NUM行,查看上下文。
-B NUM, (--before-context=NUM):输出正常匹配结果外,再输出匹配行前NUM行,查看上下文。
1.3 文件源控制
-r, (--recursive): 前面都是在一个
指定文件名的文件中搜索,
如果想搜索目录,则要指定-r或-R,或-d
递归的搜索该文件夹中的目录,处理目录中的每个文件.等价于-d recurse。
-R, (--dereference-recursive):也是递归搜索目录下的子文件。与-r不完全一样,主要是在处理symbolic links时候的差别,准确差别个人还没有确定。-r与-R在不同shell下也不一样,可以参考
http://unix.stackexchange.com/questions/154599/the-difference-between-r-and-r
-l, (--files-with-matches): 禁止通常的输出;作为替代,打印出每个在通常情况下会产生输出的输入文件的名字。对每个文件的扫描在遇到第一个匹配的时候就会停止。
-L, (--files-without-match): 禁止通常的输出;作为替代,打印出每个在通常情况下不会产生输出的输入文件的名字。对每个文件的扫描在遇到第一个匹配的时候就会停止。
2.补充说明
2.1 单引号和双引号
1)在grep命令中输入
字符串参数时,最好将其用
双引号括起来。例如:“my strings”,这样做有两个原因,一个是防止被误会是shell命令,一个是可以用来查找多个单词组成的字符串,就如这个例子中的“my strings”。
2)在
调用变量的时候,也应该使用
双引号,例如:grep “$MYNAME”。此时如果使用单引号,则会把${var}当做字面本身,而不会解析var变量的值。
3)在调用模式匹配(
正则表达式)时,应该使用
单引号。
2.2 递归查询
要想递归查询所有test结尾的文件夹及其子文件夹可以使用:
grep -ir "error" *test
但如果是想查询所有".log"结尾的文件就
不能使用:
grep -i "error" *.log
这样会报错:*.log: No such file or directory。
因为grep默认查询单个文件,不能递归。只有文件夹才可以递归,所以会匹配通配符。要想达到这个目的,可以使用:
find /destDir -name "*.log" | grep -i "error"
2.3 统计单词出现次数
1)如果只是匹配某个字符串出现的频率
grep -o "error" error.log | wc -w 或 grep -o "error" error.log | wc -l
2)如果是匹配某个"单词"出现的频率
grep -wo "error" error.log | wc -w 或 grep -o "error" error.log | wc -l
这样的话类似"errorLevel"就不会被匹配出来。
参考:
man grep
http://zhumeng8337797.blog.163.com/blog/static/1007689142011350151438/
http://blog.csdn.net/yongan1006/article/details/8134401
分享到:
相关推荐
<param-value>false</param-value> <!-- 将false改为true --> </init-param> <load-on-startup>1</load-on-startup> </servlet> ``` - 重启Tomcat服务使配置生效。 - 将下载好的Gradle包放入之前创建的文件夹...
这个压缩包“linux-grep-命令-详解.zip”包含了一份详细文档“linux-grep-基本用法及高级技巧.doc”,将深入解析grep命令的各个方面。下面,我们将根据文档内容,对grep命令进行详细介绍。 grep,顾名思义,“g/re/...
总结来说,通过安装和配置Cygwin、MSYS2或Git for Windows,Windows用户可以在CMD中享受到与Linux相似的命令行体验,包括使用强大的“grep”命令进行文本搜索。这样的扩充对于那些习惯于Linux命令行或者需要在不同...
### Linux中的`grep`命令参数及用法详解 `grep`是Linux系统中非常重要的文本搜索工具之一,它能够帮助用户高效地查找文件中的特定模式或字符串。...希望这篇详解能帮助读者更好地理解和掌握`grep`命令的使用方法。
- 查询已安装的软件包:`dpkg -l`可以列出所有已安装的软件包,`dpkg -l | grep <pattern>`可用于搜索特定的软件包。 - 查看软件包安装的文件列表:`dpkg -L <package-name>`。 2. **apt-get**: - `apt-get`是...
`ps aux | grep <process-name> | awk '{print $4}'`可以统计特定程序的内存使用量。 **9. 按内存从大到小排列进程** `ps aux | sort -nrk4`可以按内存使用量降序排列进程。 **10. 按cpu利用率从大到小排列进程*...
- `-C<显示行数>` 或 `--context=<显示行数>` 或 `-<显示行数>`: 同时显示匹配行前后的指定行数。 - `-d <动作>` 或 `--directories=<动作>`: 指定如何处理目录,如`read`(递归搜索)或`skip`(跳过)。 - `-e...
grep 命令的使用方法有多种,例如: * grep root /etc/passwd:在 /etc/passwd 文件中搜索包含 "root" 的行 * grep "USER" /etc/passwd:在 /etc/passwd 文件中搜索包含 "USER" 的行 * grep 'USER' /etc/passwd:在...
使用`aapt dump badging aapt-linux.apk | grep version`,提取版本号和代码。 3. 分析权限: 运行`aapt dump permissions aapt-linux.apk`,查看应用需要哪些敏感权限。 4. 深入资源: 用`aapt list aapt-linux....
1. grep命令的结构和基本用法 grep的基本语法是:grep [options] pattern [files]。其中options是选项,pattern是要搜索的模式,files是要在其中搜索的文件列表。如果省略文件名,则从标准输入读取。 2. grep的常见...
3. 执行`lvscan | grep <vdi-uuid>`来检查Linux底层的逻辑卷管理器(LVM)卷是否已被删除。如果LVM卷仍然存在,这可能是导致空间无法释放的原因。 如描述中所述,即使在前两步中看似一切正常,如果在第三步中LVM卷...
### 使用方法 使用`fs-grep`时,首先需要将其引入到项目中,可以使用npm进行安装: ```bash npm install fs-grep ``` 然后在JavaScript代码中导入并使用: ```javascript const fsGrep = require('fs-grep'); /...
- **rule.xml**:分片配置,定义分片规则列表和使用方法。 - **server.xml**:MyCat服务配置,涉及MyCat软件自身的配置。 **schema.xml配置** schema.xml是MyCat的核心配置文件,示例配置如下: ```xml <mycat:...
grep命令是Linux系统中非常重要的文本搜索工具,它可以对文件中的内容进行搜索,并根据用户的搜索模式,显示出包含该模式的行。grep是Global Regular Expression Print的缩写,它支持POSIX基本正则表达式和扩展正则...
- **删除旧内核**:使用 `sudo apt purge linux-image-<old-version>` 移除旧版本的 Linux 内核。 - **导入 PPA 源的 key 值**:添加第三方 PPA 之前,可能需要先导入公钥,使用命令 `sudo apt-key adv --keyserver ...
安装方法:用root安装,可在别的用户下使用:使用rpm -qa | grep java来查找是否已经安装java包 上图看出有java包存在,使用 rpm -e --nodeps 命令来进行删除 (--nodeps的作用是不检查依赖,直接删除包) 使用ftp...
### `ps`命令的基本用法 基本的`ps`命令不带任何参数时,会显示当前终端下的进程信息。例如: ```bash ps ``` ### 常见选项 1. `-a`:显示所有用户的所有进程。 2. `-u` `<username>`:显示指定用户的进程。 3. ...