目录

grep

正则表达式

grep用法简介

我们介绍GREP的用法,主要用于匹配行,我们借助下面的正则表达式来介绍如何使用grep,还有就是正则表达式在linux中是极为重要的一部分。

 1 命令:grep
 2 格式:grep [option] "pattern" filename
 3 选项:
 4          -v:反向选择
 5          -i:忽略大小写
 6          -n:显示行号
 7          -c:统计行数
 8          -o:仅显示匹配到的字符串
 9          -w:匹配整个单词
10          -q:不输出任何信息
11          -A 2:after 显示后2行
12          -B 3:before 显示前3行
13          -C 3:context 前后各3行
14          -e:实现多个选项间的逻辑关系
15                    grep -e root -e mail /etc/passwd
16          -E:相当于egrep,用于使用拓展的正则表达式
17          -F:相当于fgrep,不支持正则表达式

正则表达式(Regular expression)

什么是正则表达式

Regular expression(正则表达式)是由一类特殊字符及文本字符编写的模式,其中有些字符(元字符)不代表字符的字面意义,而表示控制或通配功能。

那些程序支持正则表达式

grep,sed,awk,vim,less,nginx,varnish

在man中查询

我们可以在正则man手册中查找正则的用法

man 7 regex

正则表达式的分类

基本正则表达式

扩展的正则表达式

元字符的分类

字符匹配,匹配次数,位置锚定,分组

基础RE(用于grep)

字符匹配

1    .        匹配任意单个字符
2    []       匹配指定范围内的任意单个字符
3    [^]      匹配指定范围外的任意字符

匹配次数:用在要指定的次数的字符后面,用于指定前面的字符出现的次数

1    *           匹配前面的字符任意次(包括0次)
2    .*          任意长度的任意字符
3    \?          匹配前面的字符0次或一次
4    \+          匹配前面的字符至少一次
5    \{n\}    匹配前面的字符n次
6    \{m,n\}   匹配前面的字符至少m次,最多n次
7    \{,n\}      匹配前面的字符最多n次
8    \{n,\}      匹配前面的字符最少n次

位置锚定:用于定位出现的位置

1   ^            行首锚定
2   $            行尾锚定
3   ^$          空行
4   ^[[:space:]]$    空白行
5   \<,\b           词首锚定,用于单词模式的左侧
6   \>,\b           词尾锚定,用于单词模式的右侧
7   \<pattern\>      匹配整个单词

分组:

\(\)将一个或多个字符捆绑在一起,当做一个整体进行处理,如\(root\)\+

分组括号中的模式匹配到的内容会被正则表达式引擎记录在内部的变量中,这些变量的命令方式为\1,\2,\3...

\1     表示从左侧起第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符

示例:

\(string1\+\(string2\)*\)

                                     \1:string1\+\(string2\)*

                                     \2:string2

后向引用:

引用前面的分组括号中的模式所匹配的字符,而非模式本身

或者:\|

扩展RE(用于egrep或grep —E

字符匹配:

1    .        匹配任意单个字符
2    []       匹配指定范围内的任意单个字符
3    [^]     匹配指定范围外的任意字符

匹配次数

1    *                匹配前面的字符任意次(包括0次)
2    ?                匹配前面的字符0次或一次
3    +                匹配前面的字符至少一次
4    {n}          匹配前面的字符n次
5    {m,n}       匹配前面的字符至少m次,最多n次

位置锚定

1   ^ :     行首
2    $ :     行尾
3    \<, \b :  语首
4    \>, \b :  语尾                    

分组:

1     ()
2     后向引用: \1, \2, ...                      

或者:

1     a|b: a或b
2     C|cat: C或cat
3     (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            

                      

转载于:https://www.cnblogs.com/duzhaoqi/p/7256307.html

grep与正则表达式基础相关推荐

  1. 强大的grep用法详解:grep与正则表达式

    from:http://hi.baidu.com/nearlove/blog/item/11db98b6b5b8aff831add1e5.html 首先要记住的是: 正则表达式与通配符不一样,它们表示 ...

  2. 蓝桥云课linux入门13:正则表达式基础

    目录 1.内容 2.正则表达式 2.1举例 2.2基本语法 3.grep模式匹配命令 3.1基本操作 3.2使用正则表达式 4 sed 流编辑器 4.1 sed常用参数介绍 4.2 sed 编辑器的执 ...

  3. Linux grep之正则表达式

    文章目录 6.grep之正则表达式 1.自学书上的 2.课件上的 3.总结 6.grep之正则表达式 1.自学书上的 在正则表达式中,空格和其他字符没有什么区别. 正则表达式识别的字符包括:*[]^$ ...

  4. 深入浅出grep与正则表达式

    一.什么是正则表达式 很可能我们经常会听到一些有经验的系统管理员告诉我们说:正则表达式非常重要.为什么说正则表达式非常重要呢?因为我们在使用文本编辑的时候或者编写shell脚本的时候经常会使用到查找. ...

  5. grep与正则表达式

    grep与正则表达式 一.grep grep文本过滤工具 作用:文本搜索工具,可以指定内容对指定文本进行匹配搜索:打印匹配的行 由正则表达式字符及文本字符编写的过滤条件,来进行逐行匹配 -- colo ...

  6. 前端学PHP之正则表达式基础语法

    前面的话 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本 ...

  7. grep及正则表达式

    grep可以说是Linux系统当中的一个文本检索工具.在Linux系统当中,其中有两个核心的理念:一切皆文件.配置文件保存为纯文本的格式.既然是纯文本的格式,可以想象,有一个好的文本检索工具是多么必要 ...

  8. Linux     grep命令,正则表达式

    grep命令及正则表达式 grep命令 grep , egrep , fgrep grep,sed,awk 文本处理三剑客 grep: Global search REgular expression ...

  9. 万物之始正则表达式全解析三部曲(上篇)-正则表达式基础知识及语法

    前言 各位小伙伴大家好,接下来几天时间,我会从多个角度对正则表达式进行系统阐述,让你了解正则表达式的前世今生. 以下是博主整理的Linux知识专栏,喜欢的小伙伴可根据自己的需求自行订阅. Linux疑 ...

最新文章

  1. springboot 使用idea打包 遇到问题
  2. CSDN 1024,“猿”来在等你!
  3. mysql源码包的安装
  4. postman接口文档
  5. CAD文件零基础批量转换DWG格式
  6. Bushound数据分析及使用指南
  7. arm linux开机第一屏,小白求助大神T1刷机提示成功,但开机卡在斐讯白屏界面。...
  8. JAVA基于UDP的一个聊天程序
  9. java 执行bat文件
  10. 计算机组装物料清单,物料清单
  11. Arduino基础入门篇19—点阵屏
  12. vue 临时会话sessionStorage
  13. visio如何画程序流程图的箭头
  14. 噪声dba是什么单位_声音的大小dB,到底是什么单位?
  15. Tita :OKR落地推行的具体方法
  16. codeblock 常见问题
  17. 浏览器办公自动化iMacros
  18. 华为鸿蒙2048小游戏,《从零开发鸿蒙小游戏App》直播答疑(包含新版2048游戏代码)...
  19. 如何建立自己的知识仓库?
  20. 电网变电站高空作业规范检测-安全绳、安全带佩戴检测图像数据集(voc,yolo两类标签)

热门文章

  1. 25.计算机和计算器的区别
  2. 谷歌正式宣称“量子霸权”:意义堪比莱特兄弟的第一次飞行
  3. 如何用WORD制作三线表
  4. java图书凭租_如何通过java一步实现租书系统
  5. tps 数据库写并发衡量_MPP数据库简介
  6. css层叠上下文详解,CSS定位(层叠上下文)
  7. 010_AOPXml方式开发
  8. 084_html5WebWorkers
  9. 2020.12.15
  10. java 张龙_张龙 JAVA5新特性学习笔记