grep与正则表达式基础
目录
grep
正则表达式
grep用法简介
我们介绍GREP的用法,主要用于匹配行,我们借助下面的正则表达式来介绍如何使用grep,还有就是正则表达式在linux中是极为重要的一部分。
命令:grep
格式:grep [option] "pattern" filename
选项:
-v:反向选择
-i:忽略大小写
-n:显示行号
-c:统计行数
-o:仅显示匹配到的字符串
-w:匹配整个单词
-q:不输出任何信息
-A :after 显示后2行
-B :before 显示前3行
-C :context 前后各3行
-e:实现多个选项间的逻辑关系
grep -e root -e mail /etc/passwd
-E:相当于egrep,用于使用拓展的正则表达式
-F:相当于fgrep,不支持正则表达式
正则表达式(Regular expression)
什么是正则表达式
Regular expression(正则表达式)是由一类特殊字符及文本字符编写的模式,其中有些字符(元字符)不代表字符的字面意义,而表示控制或通配功能。
那些程序支持正则表达式
grep,sed,awk,vim,less,nginx,varnish
在man中查询
我们可以在正则man手册中查找正则的用法
man 7 regex
正则表达式的分类
基本正则表达式
扩展的正则表达式
元字符的分类
字符匹配,匹配次数,位置锚定,分组
基础RE(用于grep)
字符匹配
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意字符
匹配次数:用在要指定的次数的字符后面,用于指定前面的字符出现的次数
* 匹配前面的字符任意次(包括0次)
.* 任意长度的任意字符
\? 匹配前面的字符0次或一次
\+ 匹配前面的字符至少一次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,最多n次
\{,n\} 匹配前面的字符最多n次
\{n,\} 匹配前面的字符最少n次
位置锚定:用于定位出现的位置
^ 行首锚定
2 $ 行尾锚定
^$ 空行
^[[:space:]]$ 空白行
\<,\b 词首锚定,用于单词模式的左侧
\>,\b 词尾锚定,用于单词模式的右侧
\<pattern\> 匹配整个单词
分组:
\(\)将一个或多个字符捆绑在一起,当做一个整体进行处理,如\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录在内部的变量中,这些变量的命令方式为\1,\2,\3...
\1 表示从左侧起第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
示例:
\(string1\+\(string2\)*\)
\1:string1\+\(string2\)*
\2:string2
后向引用:
引用前面的分组括号中的模式所匹配的字符,而非模式本身
或者:\|
扩展RE(用于egrep或grep —E)
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意字符
匹配次数
* 匹配前面的字符任意次(包括0次)
? 匹配前面的字符0次或一次
+ 匹配前面的字符至少一次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,最多n次
位置锚定
^ : 行首
$ : 行尾
\<, \b : 语首
\>, \b : 语尾
分组:
()
后向引用: \, \, ...
或者:
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat
特殊字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 水平空白字符(空格和制表符)
[:space:] 所有水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
[:xdigit:] 十六进制数字
grep
1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
cat /proc/meminfo | grep "^[sS]"
cat /proc/meminfo | grep "^[s\|S]"
cat /proc/meminfo | grep "^s\|^S"

2、显示/etc/passwd文件中不以/bin/bash结尾的行
cat /etc/passwd | grep -v "/bin/bash$"

3、显示用户rpc默认的shell程序
cat /etc/passwd | grep "^rpc\>" | grep -o "[^/]\+$"
cat /etc/passwd | grep "^rpc\>" | cut -d"/" -f6

4、找出/etc/passwd中的两位或三位数
cat /etc/passwd | grep "\b[0-9]\{2,3\}\b"

5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白 字符的行
cat grub2.txt | grep "^[[:space:]]\+[[:graph:]].*"

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行
netstat -tan | grep "LISTEN[[:space:]]*$"

7、显示CentOS7上所有系统用户的用户名和UID
cat /etc/passwd | cut -d ":" -f 1,3 | grep -v "\b0$" | grep "\b[0-9]\{1,3\}\b"
cat /etc/passwd | cut -d ":" -f 1,3 | grep -ve "\b0$" -e "[0-9]\{4,\}"

8、添加用户bash、 testbash、 basher、 sh、 nologin(其shell为/sbin/nologin),找出 /etc/passwd用户名同shell名的行
cat /etc/passwd | grep "\(^[[:alnum:]]\+\>\).*\<\1$"

9、利用df和grep及sort,取出磁盘各分区利用率,并从大到小排序
df | grep "/dev/sd" | grep -o "[0-9]\{1,\}%" | sort -nr

egrep
1、显示三个用户root、 mage、 wang的UID和默认shell
cat /etc/passwd | egrep "^root|^mage|^wang" | tr -s ":" "/" | cut -d"/" -f3,8
cat /etc/passwd | egrep "^root|^mage|^wang" | cut -d":" -f3,7

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
cat /etc/rc.d/init.d/functions | egrep -o "^([[:alpha:]]+|_).*[[:graph:]]\(\)"
cat /etc/rc.d/init.d/functions | egrep -o "^.*[[:grpha:]]\(\)"
cat /etc/rc.d/init.d/functions |egrep -o "^.*\>\(\)"

3、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo /etc/rc.d/init.d/functions | egrep -o "\b[[:alnum:]]+/*$"
echo /etc/rc.d/init.d/functions | egrep -o "\b[[:alnum:]]+/?$"
echo /etc/rc.d/init.d/functions |egrep "[^/]+/?$" -o

4、使用egrep取出上面路径的目录名
echo /etc/rc.d/init.d/functions | egrep -o ".*/\<"
echo /etc/rc.d/init.d/functions |egrep -o ".*/." |egrep -o

5、统计last命令中以root登录的每个主机IP地址登录次数
last | grep ^root | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c

6、利用扩展正则表达式分别表示0-9、 10-99、 100-199、200-249、 250-255
echo {1..1000} | egrep -o "\b[0-9]\b" | tr "\n" " " ;echo
echo {1..1000} | egrep -o "\b[0-9]{2}\b" | tr "\n" " " ;echo
echo {1..1000} | egrep -o "\b1[0-9]{2}\b" | tr "\n" " " ;echo
echo {1..1000} | egrep -o "\b2[0-4][0-9]\b" | tr "\n" " " ;echo
echo {1..1000} | egrep -o "\b25[0-5]\b" | tr "\n" " " ;echo

7、显示ifconfig命令结果中所有IPv4地址
ifconfig|egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

8、将此字符串: welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
echo "welcome to magedu linux" | tr -d " " | grep -o "." | sort | uniq -c | sort -nr
grep与正则表达式基础的更多相关文章
- Linux grep与正则表达式
grep命令 格式:grep [-acinv] [--color=auto] '查找字符串' filename -a 将binary文件以text文件的 -c 计算找到 ‘查找字符串’ ...
- bash shell学习-正则表达式基础 (笔记)
A gentleman is open-minded and optimistic; a small person is narrow-minded and pessimistic. "君子 ...
- grep与正则表达式,grep、egrep和fgrep
grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...
- (大数据工程师学习路径)第一步 Linux 基础入门----正则表达式基础
介绍 虽然我们这一节的标题是正则表达式,但实际这一节只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式).正则表达式本身的内容很多,要把 ...
- Linux学习(2)- 正则表达式基础
Linux学习(2)- 正则表达式基础 一.基础正则表达式介绍与练习 学习内容 正则表达式特殊符号 [:alnum:]代表英文大小写字母及数字 [:alpha:]代表英文大小写字母 [:blank:] ...
- grep与正则表达式详解和实例
转载自:http://www.jb51.net/article/31207.htm grep 工具,以前介绍过. grep -[acinv] '搜索内容串' filename -a 以文本文件方式搜索 ...
- 正则表达式基础->
描述:(grep) 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于两个正斜杠之间,它匹配被查找的行中任何位置出现的相同模式 基础正则表达式 正则表达式 描 ...
- [Linux 006]——grep和正则表达式
在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配, ...
- linux正则表达式基础
linux中awk,sed,grep等 命令使用区别正则表达式基础 在最简单的情况下,一个正则表达式看上去就是一个普通的查找串.例如,正则表达式"testing"中没有包含任何元字 ...
随机推荐
- JMeter元件的作用域和执行顺序
元件的作用域 配置元件:会影响其作用范围内的所有元件,作用范围是最大的,只要创建就对所有元件起作用. 前置处理器:在其作用范围内的每一个Sample元件之前执行: 定时器:对其作用范围内的每一个Sam ...
- 【Regular Expression】RE分类及案例
背景知识 正则表达式分为三类:基础正则表达式.扩展正则表达式.Perl正则表达式(Perl内建) 通俗来说,这三个一个比一个强大,支持的规则匹配字符更多 1.匹配IP ip addr | grep - ...
- C和C++混合编程之 extern “C”的使用
C和C++混合编程之 extern "C"的使用 首先要明白: C++号称是C语言的超集,也确实,从语言的基本语法上,C++是包含所有C语言的语法的,而且C++为了兼容C,连C语言 ...
- grep Pocket Reference读记
1 简介 grep的基本命令格式如下: grep [options] [regexp] [filename] 如果regexp中含有空格,应该使用单引号或双引号括起来.单引号和 ...
- Ext.data.Store添加动态参数
多条件查询页面的参数都是动态的,并且我们通常还会有默认加载页面.此时,动态添加参数非常重要,其中baseparam是解决问题的关键. @ 将查询条件定义为一个全局变量 var param_01 = & ...
- 关于样式选择器:hover出现忽闪现象
有时候在做项目的时候会想给一个元素添加一个遮罩效果,然后鼠标划过去的时候,遮罩消失,一般最简单的方法就是使用样式选择器:hover,但是经历过才知道恶心,有种灯泡快要坏的感觉,闪瞎自己的眼睛,于是诞生 ...
- [js高手之路]深入浅出webpack教程系列4-插件使用之html-webpack-plugin配置(上)
还记得我们上文中的index.html文件吗? 那里面的script标签还是写死的index.bundle.js文件,那么怎么把他们变成动态的index.html文件,这个动态生成的index.htm ...
- ASP.NET Excel导入Sql Server数据库(转)
先看界面图 实现的基本思想: 1,先使用FileUpload控件fuload将Excel文件上传到服务器上得某一个文件夹. 2,使用OleDb将已经上传到服务器上的Excel文件读出来,这里将Exce ...
- Java虚拟机的内存结构
我们都知道虚拟机的内存划分了多个区域,并不是一张大饼.那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存的地方都往这块区域里扔不就行了,岂不痛快.是的,如果不进行区域划分,扔的时候确实痛快,可 ...
- pip install python 如何快速安装模块
之前python安装模块要在网络上下载,从python2.7.9之后,以及python3,python就自带pip 这个命令,能够快速的安装模块 1, 首先打开python的主文件夹 2.在主文件夹 ...