linux 中grep 命令详细使用方法说明
前言
在linux命令行中,经常需要对当前获取的一堆数据进行过滤、提取和分析,其中grep命令是其中非常重要的命令之一,比如,在生产环境服务器上,经常使用到下面这个命令
ps -ef | grep java
显然,grep的作用就是帮助筛选出那些运行中的java进程
grep 作用
文本搜索工具,根据用户指定的“模式”(过滤条件),对目标文本逐行进行匹配,并打印输出匹配到的行;
模式:由正则表达式的元字符串及文本字符串所编写的过滤条件
grep 完整语法结构
grep [options] [pattern] file
命令 参数 匹配模式 文件数据
上述语法结构中,经常可配合下面的参数一起使用
-i : 忽略大小写;
-o : 仅显示匹配到目标字符串;
-v : 显示不能被匹配到的字符串(反转);
-E : 支持使用扩展的正则表达式字符串;
-q : 静默模式,不输出任何信息
grep命令是linux系统命令中最重要的命令之一,功能是从文本文件,或者管道数据流中筛选出匹配到的行或数据,如果再配合正则表达式,功能将十分强大;
grep 命令里的匹配模式,就是你想要找出来的数据,可以是普通的文字符号,也可以是正则表达式;
grep常用的参数总结
参数选项 解释说明
-V 排除匹配结果
-n 显示匹配行与行号
-i 不区分大小写
-c 只统计匹配行数
-E 使用egrep命令
-o 只输出匹配内容
-w 只输出过滤的单词
-F 不适用正则表达式
-l 列出包含匹配项的文件名
-L 列出不包含匹配项的文件名
grep中常用正则表达式
一、基本常用正则表达式汇总
表达式 解释说明
^ 用于模式最左侧,如 “^yu” 即匹配以yu开头的单词
$ 用于模式最右侧,如 “yu$” 即匹配以yu结尾的单词
^$ 组合符,表示空行
. 匹配任意一个且只有一个字符,不能匹配空行
| 转义字符
* 重匹配前一个字符连续出现0次或1次以上
.* 匹配任意字符
^.* 组合符,匹配任意多个字符开头的内容
.*$ 组合符,匹配任意多个字符结尾的内容
[abc] 匹配 [] 内集合中的任意一个字符,a或b或c,也可以写成 [ac]
[^abc] 匹配除了 ^后面的任意一个字符,a或b或c,[]内 ^ 表示取反操作
案例演示
素材准备,将系统中账户密码输出到一个pwd.txt文件中
自定义一个names.txt 的文件,内容如下
1、找出names.txt中的注释行,并过滤空行
grep "^#" names.txt -v | grep "^$" -v
2、输出以h开头的行,不区分大小写
这里重点考察对 “^” 的使用
grep -i "^h" names.txt
3、输出以/bin/bash结尾的行
grep -n "bin/bash$" pwd.txt
4、过滤非空的行
grep '^$' names.txt -v
5、匹配文本中至少包含一个 is 的行
grep -i ".is" names.txt
6、匹配文本中包含数字的行
考察对 [abc] 类似的用法
[a-z] 匹配所有小写单个字母
[A-Z] 匹配所有大写单个字母
[a-zA-Z] 匹配所有单个大小写字母
[0-9] 匹配所有单个数字
[0-9a-zA-Z] 匹配所有数字和字母
grep "[0-9]" names.txt
二、扩展正则表达式使用
表达式 解释说明
+ 表示匹配前一个字符一次或多次
? 表示匹配前一个字符0次或1次
() 将一个或多个字符捆绑在一起,当作整体进行处理
{n,m} 匹配目标字符,最少n次,最多m次
{n,m} 匹配目标字符,最少n次,上不封顶
> 匹配位于 目标字符开头的字符串,即截止到 < 前面的字符为止,精确匹配
< 匹配位于 目标字符结尾的字符串,即截止到 > 前面的字符为止,精确匹配
案例演示
1、筛选前一个字符包含e的的文本行
grep -E 'e+' names.txt
2、筛选前一个字符包含he的出现0次或者1次的文本行
grep -E 'he?' names.txt
3、找出文本中包含 “hi” 或 “java” 的文本行
grep -E -i 'hi|java' names.txt
4、找出文本中包含 good和glad的文本
这里考察使用小括号() 分组的用法,下面有一个测试文本文件,内容如下
grep -E 'g(oo|la)d' test1.txt
5、找出文本中的 o 字符出现的次数最少2次,最多7次的文本行
考察dui {n,m}的用法,表示匹配的字符最少n次,最多m次
grep -E 'o{2,7}' test1.txt
6、找出文本中的 o 字符出现的次数最少3次
grep -E 'o{3,}' test1.txt
7、找出文本中root用户和zcy用户
如果像下面这样直接使用grep命令查找,可以看到zcy这个字符串开头的账户有多个,显然不符合预期
grep -E '^(root|zcy)' pwd.txt
这就需要使用到 > 这个表达式了,改进之后,再次执行就符合预期的目标了
grep -E '^(root|zcy)\>' pwd.txt
三、常用grep 正则表达式参数汇总
下面提供一些grep相关的可选参数,方便遇到问题时快速查阅
表达式 解释说明
-a 或 --text 不要忽略二进制的数据。
-A<显示行数> 或 --after-context=<显示行数> 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b 或 --byte-offset 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数> 或 --before-context=<显示行数> 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 --count 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> 除了显示符合样式的那一行之外,并显示该行之前后的内容
-d <动作> 或 --directories=<动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作
-e<范本样式> 或 --regexp=<范本样式> 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp 将样式为延伸的正则表达式来使用。
-f<规则文件> 或 --file=<规则文件> 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 --fixed-regexp 将样式视为固定字符串的列表。
-G 或 --basic-regexp 将样式视为普通的表示法来使用。
-h 或 --no-filename 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H 或 --with-filename 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i 或 --ignore-case 忽略字符大小写的差别。
-l 或 --file-with-matches 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match 列出文件内容不符合指定的样式的文件名称。
-n 或 --line-number 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 --only-matching 只显示匹配PATTERN 部分。
-q 或 --quiet或–silent 不显示任何信息。
-r 或 --recursive 此参数的效果和指定"-d recurse"参数相同
-s 或 --no-messages 不显示错误信息
-v 或 --invert-match 显示不包含匹配文本的所有行
-V 或 --version 显示版本信息。
-w 或 --word-regexp 只显示全字符合的列
-x --line-regexp 只显示全列符合的列
-y 此参数的效果和指定"-i"参数相同
其他grep相关案例总结
1、统计出zcy 账户出现的次数
grep -c '^zcy' pwd.txt
2、匹配zcy这个账户,匹配结果最多展示2条
grep -m 2 '^zcy' pwd.txt
3、匹配多文件下,存在某个字符串的内容
grep "zcy" ./f1/pwd.txt ./f2/word.txt
4、找出系统密码中那些仅包含2位数或者3位数的内容
grep -n -E "\<[0,9]{2,3}\>" ./pwd.txt
5、匹配那些以大写字母开头的行
grep -n -E "^[A-Z]" names.txt
6、从多个账户中匹配出任意一个符合要求的
grep -n -E "^(root|zcy|nobidy)\>" ./pwd.txt
7、递归找出当前root目录下所有文件中包括zcy字符的文件
grep -r '^zcy' /root
linux 中grep 命令详细使用方法说明的更多相关文章
- 12个 Linux 中 grep 命令的超级用法实例
12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...
- Linux中systemctl命令详细介绍
Linux Systemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syst ...
- linux中grep命令的使用
转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regul ...
- Linux中grep命令的12个实践例子
grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具.无论何种原因,如果你的系统没有预装它的话,你可以很容易的通过系统的包管理器来安装它(Debian/Ubuntu系中的apt-get和 ...
- Linux 中 grep 命令的 12 个实践例子
2017-10-17 Linux小管家 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一个强有力的文件 ...
- Linux中grep命令学习
1.简介 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟grep有很小 ...
- linux中grep命令的用法
作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的. 首先谈一下grep命令的常用格式为:[grep [选项] "模式" [ ...
- Linux中man命令的使用方法再解释
原文链接:http://www.linuxidc.com/Linux/2017-03/142407.htm Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下 ...
- Linux中grep命令,用或的关系查询多个字符串,正则表达式基础说明
请尊重版权:原文:https://blog.csdn.net/lkforce/article/details/52862193 使用 grep 'word1|word2' 文件名 这样的命令是不对的 ...
- linux中grep命令
grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep常用用法 [root@www ~]# grep [-acinv] [--color=auto] '搜寻字 ...
随机推荐
- 使用Java分析器优化代码性能,解决OOM问题
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 背景 最近我一直在做性能优化,对一个单机应用做性能优化.主要是 ...
- [转帖]ORACLE新参数MAX_IDLE_TIME和MAX_IDLE_BLOCKING_TIME简介
https://www.cnblogs.com/kerrycode/p/16856171.html Oracle 12.2 引入了新参数MAX_IDLE_TIME.它可以指定会话空闲的最大分钟数.如果 ...
- MongoDB的安装使用与监控
MongoDB的安装使用与监控 下载 https://www.mongodb.com/try/download/community 我这边习惯于下载 Windows 的 MSI 进行安装 Linux ...
- Harbor镜像仓库的导出与整理之二
Harbor镜像仓库的导出与整理之二 背景 前几天参照大神的blog进行了一下harbor的镜像列表的获取与下载. 当时发现一个很诡异的问题. 实际上镜像仓库里面的镜像很多. 但是导出和列表里面的却很 ...
- [转帖]Promethues + Grafana + AlertManager使用总结
Prometheus是一个开源监控报警系统和时序列数据库,通常会使用Grafana来美化数据展示. 1|01. 监控系统基础架 1|11.1核心组件 Prometheus Server, 主要用于抓取 ...
- [转帖]linux时间戳转换成时间指令_时间戳转换公式
原文地址:http://wanping.blogbus.com/logs/28663569.html 1.时间戳转换为正常显示的时间格式 Freebsd 系统下: 转换命令为: date -r 111 ...
- Nginx 大并发 调优设置
为了性能测试,放弃部分功能,保证绝对性能. 注意可能不能用于生产环境. 下面开始简单讲解. 1. worker_processes 工作线程数. 发现不用太多 一定不能多于操作系统的CPU核数. 2. ...
- redis 6源码解析之 dict
edis源码的dict.c主要实现了基于hash表的操作,如增删改查,对哈希表大小的扩容和缩容,以及对哈希表的rehash和增量rehash等.在源码的dictScan函数中,非常巧妙精美地实现了对哈 ...
- 【dp,建模】AGC032D Rotation Sort
Problem Link 有一个长为 \(n\) 的排列 \(p\),给定 \(A,B\),你每次可以做以下两种操作之一: 选取 \(l,r\),将 \(p[l:r]\) 循环右移,代价为 \(A\) ...
- 在k8s中的控制器和部署服务-ReplicationController和ReplicaSet
pod 代表了 k8s 中的基本部署单元,但是在实际应用场景中,服务不可能是单个pod运行的,否则会出现"单点".在 k8s 中对 pod 的托管部署,专门抽象成了单独的资源.其中 ...