Linux三剑客之老三grep
说明:
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。工作中我们常常用它来过滤出我们想要的数据。
格式:
grep [OPTIONS]
基本参数:
-i 不区分大小写
-v 排除内容,即取反
-n 对匹配到的内容打印相应行号
-E 使用扩展正则表达式(相当于egrep)
-r 递归读取目录下的文件(即包括子目录下文件)
-c 对匹配到的行进行计数
-o 只显示匹配到的内容
-A (after)匹配输出内容行并输出内容行后的指定行
-B (before)匹配输出内容行并输出内容行前的指定行
-C (context)匹配输出内容行并输出内容行的前后指定行
--color 过滤的内容显示颜色
建议配置别名:
echo “alias grep='grep --color'” >> /etc/profile //配置别名
source /etc/profile //重读文件使别名生效
效果:
[root@vm1 test]# grep ".*" /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
常见用法:
① grep -ivnEoc… “匹配内容” 文件名
[root@vm1 test]# grep -n "root" /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 11:operator:x:11:0:operator:/root:/sbin/nologin
② grep -r “匹配内容” 文件目录/*
[root@vm1 ~]# grep -r "www" test/* test/Caiyun.txt:My blog is http://www.cnblogs.com/Caiyundo/ test/dudu/3.txt:www.cnblog.com/caiyun
③ grep “匹配内容” -A 指定行 文件名
[root@vm1 ~]# grep "root:x" -nA 5 /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin 4-adm:x:3:4:adm:/var/adm:/sbin/nologin 5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6-sync:x:5:0:sync:/sbin:/bin/sync
④ 命令 | grep “匹配内容”
[root@vm1 ~]# ps -ef |grep "sshd" root 1261 1 0 Dec12 ? 00:00:00 /usr/sbin/sshd
扩展:
正则表达式是为处理大量字符串而定义的一套规则和方法,linux正则表达式常用于linux三剑客中。
测试场景模拟(直接复制粘贴即可):
cat >>text.txt<<EOF
My name is Caiyun.
I like badminton, snooker, running
Maybe I'm not a smart person, but I'm working hard.
My blog is http://www.cnblogs.com/Caiyundo/
Welcome to my blog! CAIYUN
My qq is 791111890
My mail is Caiyun111111@gmail.com.
EOF
一、 基础正则表达式
^ 表示以...字符开头,^word
[root@vm1 test]# grep -n "^My" text.txt 1:My name is Caiyun. 5:My blog is http://www.cnblogs.com/Caiyundo/ 8:My qq is 791111890 9:My mail is Caiyun111111@gmail.com.
$ 表示以...字符结尾,word$
[root@vm1 test]# grep -n "\.$" text.txt 1:My name is Caiyun. 4:Maybe I'm not a smart person, but I'm working hard. 9:My mail is Caiyun111111@gmail.com.
^$ 表示空字符,即可理解为空行
[root@vm1 test]# grep -n "^$" text.txt 3: 7:
. 表示匹配任意单个字符
[root@vm1 test]# grep -n "b." text.txt 2:I like badminton, snooker, running 4:Maybe I'm not a smart person, but I'm working hard. 5:My blog is http://www.cnblogs.com/Caiyundo/ 6:Welcome to my blog! CAIYUN
\ 表示转义符
[root@vm1 test]# grep -n "\.$" text.txt 1:My name is Caiyun. 4:Maybe I'm not a smart person, but I'm working hard. 9:My mail is Caiyun111111@gmail.com.
* 表示重复前面0个或1个以上字符
[root@vm1 test]# grep -n "bl*" text.txt 2:I like badminton, snooker, running 4:Maybe I'm not a smart person, but I'm working hard. 5:My blog is http://www.cnblogs.com/Caiyundo/ 6:Welcome to my blog! CAIYUN
.* 表示匹配所有
[root@vm1 test]# grep -n ".*" text.txt 1:My name is Caiyun. 2:I like badminton, snooker, running 3: 4:Maybe I'm not a smart person, but I'm working hard. 5:My blog is http://www.cnblogs.com/Caiyundo/ 6:Welcome to my blog! CAIYUN 7: 8:My qq is 791111890 9:My mail is Caiyun111111@gmail.com.
[] 表示匹配"[]"里面任意单个字符
[root@vm1 test]# grep -n "[791]" text.txt 8:My qq is 791111890 9:My mail is Caiyun111111@gmail.com.
[^] 表示取反"[^]"里面的任意单个字符
[root@vm1 test]# echo Caiyun >> test2.txt [root@vm1 test]# echo 791111890 >> test2.txt [root@vm1 test]# grep -n "[^0-9]" test2.txt 1:Caiyun
[-] 表示匹配"[-]"里一段字符的任意单个字符,如[0-9]即0到9
[root@vm1 test]# grep -n "[0-9]" text.txt 8:My qq is 791111890 9:My mail is Caiyun111111@gmail.com.
1\{4\} 表示匹配字符 "1" 重复4次
[root@vm1 test]# grep -n "1\{4\}" text.txt
8:My qq is 791111890
9:My mail is Caiyun111111@gmail.com.
1\{5,\} 表示匹配字符 "1" 重复5次或5次以上
[root@vm1 test]# grep -n "1\{5,\}" text.txt
9:My mail is Caiyun111111@gmail.com.
1\{,6\} 表示匹配字符 "1" 重复6次和6次以内
[root@vm1 test]# grep -n "1\{,6\}" text.txt
1:My name is Caiyun.
2:I like badminton, snooker, running
3:
4:Maybe I'm not a smart person, but I'm working hard.
5:My blog is http://www.cnblogs.com/Caiyundo/
6:Welcome to my blog! CAIYUN
7:
8:My qq is 791111890
9:My mail is Caiyun111111@gmail.com.
1\{3,5\} 表示匹配字符 "1" 重复3-5次
[root@vm1 test]# grep -n "1\{3,5\}" text.txt
8:My qq is 791111890
9:My mail is Caiyun111111@gmail.com.
二、扩展正则表达式
+ 表示重复 "一个或一个以上" 前面的所有字符("*"是0个)
[root@vm1 test]# grep -n "11111*" text.txt 8:My qq is 791111890 9:My mail is Caiyun111111@gmail.com. [root@vm1 test]# grep -n "11111\+" text.txt 9:My mail is Caiyun111111@gmail.com.
? 表示重复 "0个或一个" 前面的字符("."是有且只有1个)
[root@vm1 test]# grep -n "11111." text.txt 9:My mail is Caiyun111111@gmail.com. [root@vm1 test]# grep -n "11111\?" text.txt 8:My qq is 791111890 9:My mail is Caiyun111111@gmail.com.
| 表示过滤多个字符串
[root@vm1 test]# grep -nE "CAIYUN|mail" text.txt 6:Welcome to my blog! CAIYUN 9:My mail is Caiyun111111@gmail.com. [root@vm1 test]# grep -n "CAIYUN\|mai" text.txt 6:Welcome to my blog! CAIYUN 9:My mail is Caiyun111111@gmail.com.
一般情况下,当我们需要用到扩展正则表达式匹配符时,使用grep要加参数 ”-E” 或用 “\” 转译符转义匹配符
三、元字符
\b 边界字符,单词边界
[root@vm1 test]# grep 'Caiyun' text.txt My name is Caiyun. My blog is http://www.cnblogs.com/Caiyundo/ My mail is Caiyun111111@gmail.com. [root@vm1 test]# grep 'Caiyun\b' text.txt My name is Caiyun.
grep的用法还有很多,只要符合规则、逻辑,还可以和很多其他命令配合使用。
PS:要活学活用,多用多练。
Linux三剑客之老三grep的更多相关文章
- 第十二章 Linux三剑客之老三—grep
一.Linux grep 命令用于查找文件里符合条件的字符串. Linux系统中的grep命令是一种功能强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global ...
- 性能工具之linux三剑客awk、grep、sed详解
前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...
- Linux 三剑客 -- awk sed grep
本文由本人收集整理自互联网供自己与网友参考,参考文章均已列出,如有侵权,请告知! 顶配awk,中配sed,标配grep awk 参考 sed 参考 grep 参考 在线查看linux命令速记表 app ...
- Linux三剑客及使用介绍
Linux 三剑客是(grep,sed,awk)三者的简称,熟练使用这三个工具可以提升运维效率.Linux 三剑客以正则表达式作为基础,而在Linux系统中,支持两种正则表达式,分别为"标准 ...
- Linux三剑客老三---grep
1.Linux三剑客老三 过滤需要的内容,例子:grep -v oldboy hello.txt grep一般常用参数: -a:在二进制文件中,以文本文件的方式搜索数据. -c:计算找到"搜 ...
- (转)不看绝对后悔的Linux三剑客之grep实战精讲
不看绝对后悔的Linux三剑客之grep实战精讲 原文:http://blog.51cto.com/hujiangtao/1923675 https://www.cnblogs.com/peida/a ...
- Linux三剑客之grep常用参数详细总结
三剑客grep总结 grep : Linux三剑客老三 过滤需要的内容 参数: grep一般常用参数: -a :在二进制文件中,以文本文件的方式搜索数据 -c :计算找到 ’ 搜索字符串 ...
- Linux三剑客grep、awk、sed
何为Linux三剑客? 第一个剑客是 grep,grep 会根据正则表达式查找相关内容并打印对应的数据. 第二个剑客是 awk,awk 的名字来源于三个作者的名字简称,它可以根据定位到的数据行处理其中 ...
- Linux三剑客grep、awk和sed
grep,sed 和 awk是Linux/Unix 系统中常用的三个文本处理的命令行工具,称为文本处理三剑客.本文将简要介绍这三个命令并给出基本用法. 管道 在介绍这两个命令之前,有必要介绍一下Uni ...
随机推荐
- NKOJ-2936 城市建设
问题描述: PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁.Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费.Louis希望建造最少的道路使得国 ...
- 对dy和Δy的浅薄理解
一.导数定义 当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x0)或df(x0) ...
- 微服务(五)nacos配置管理
1 统一配置管理 1.1 nacos中添加配置文件 注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要.基本不会变更的一些配置还是保存在微服务本地比较好. 1.2 从微服务拉取配置 微 ...
- 数组中的逆序对 牛客网 剑指Offer
数组中的逆序对 牛客网 剑指Offer 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对10000000 ...
- 另类加法 牛客网 程序员面试经典 C++ Python
另类加法 牛客网 程序员面试经典 C++ Python 题目描述 请编写一个函数,将两个数字相加.不得使用+或其他算数运算符. 给定两个int A和B.请返回A+B的值 测试样例: 1,2 返回:3 ...
- 面试官:能手写实现call、apply、bind吗?
1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...
- 线程创建,属性设置与获得,等待线程结束,线程中fork,以及执行exec()
这篇博客的形式我想以分析代码不同情况为主: 点击(此处)折叠或打开 #include<stdio.h> #include<pthread.h> #include<time ...
- offsetX各种值总结
pageX: 页面X坐标位置 pageY: 页面Y坐标位置 screenX: 屏幕X坐标位置 screenY: 屏幕Y坐标位置 clientX: 鼠标的坐标到页面左侧的距离 clientY: 鼠标的坐 ...
- js--数组的 Array.of() 和 Array.from() 方法的使用总结
前言 JavaScript 中数组的本质是一个对象,它存在的 length 属性值随数组元素的长度变化,但是开发中经常会遇到拥有 length 属性和若干索引属性的对象,被称为类数组对象,类数组对象和 ...
- 【完虐算法】LeetCode 接雨水问题,全复盘
大家好! 动态规划题目是总结的比较完整了.下面是自从和大家刷开题总结的动态规划解题方法. 今年全国夏天雨是真的多,突然想到今年北京的夏天也不像往年那么热.不知不觉就稳稳地度过了夏天来到秋天. 恰巧前几 ...