正则表达式及grep

正则表达式及grep

#以下所有的举例是用正则表达式的方式

#正则表达式

#由一类特殊字符及文本所编写的模式

#分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

字符匹配选项

.              匹配任意单个字符 []               匹配指定范围内的任意单个字符
示例:cat /etc/passwd | grep "roo."         查看/etc/passwd目录下 显示包含roo后面加任意单个字符的行 示例:cat /etc/passwd | grep [bin]        查看/etc/passwd目录下 显示包含b、i、n其中任意一个字母的行
[^]           匹配指定范围外的任意单个字符 [:alnum:]   任意字母和数字
示例:cat /etc/passwd | grep [^bin]        查看/etc/passwd目录下 显示除b、i、n三个字母之外任意的字符全部是要找的字符 示例:cat /etc/passwd | grep [[:alnum:]]        查看/etc/passwd目录下 显示包含任意字母和数字的行
[:alpha:]  代表任何英文字母大小写 例[a-z] [A-Z] [:lower:]    小写字母[a-z]  [:upper:] 大写字母[A-Z]
示例:cat /etc/passwd | grep [[:alpha:]]        查看/etc/passwd目录下 显示包含任意大小写字母的行 示例:cat /etc/passwd | grep [[:lower:]]        查看/etc/passwd目录下 显示包含任意小写字母的行  [:upper:] 同理
[:blank:] 空白字符(空格和制表符) [:space:]   水平和垂直的空白字符
[:cntrl:]  不可打印的控制字符 (退格、删除....) [:digit:]     十进制数字    [:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符 [:print:]     可打印字符   [:punct:]  标点符号

下面几个命令大概都类似 只是用/etc/passwd这个目录来举例做简单的示范 几个匹配字符还可以进行组合 接下来会进行举例

匹配次数选项

\+         匹配前面的字符至少一次 .*          任意长度的任意字符
示例:cat  /etc/passwd | grep  ["o"\+]         查看/etc/passwd 目录下每行包含o后面的全部内容 示例:cat  /etc/passwd | grep  o.*         查看/etc/passwd 目录下每行包含o后面的全部内容
\?     匹配其前面的字符0或1次 *       匹配前面或后面的字符0到无穷次 尽可能长的匹配
\{n\}  匹配前面的字符n次 n代表任意一个数字 \{m,n\}  匹配前面的字符至少m次 至多n次
\{n,\} 匹配前面的字符至少n次 \{,n\}     匹配前面的字符至多n次
示例: cat /etc/passwd | grep "1\{3,\}"   查看/etc/passwd 目录下前面是1后面最少跟三个1的行
示例: cat /etc/passwd | grep "1\{,3\}"   查看/etc/passwd 目录下前面是1后面最少0最多跟三个1的行

位置锚定选项

^         锚定行首  用于模式的最左侧 $   行尾锚定 用于模式的最右侧
示例:cat  /etc/passwd | grep ^"\<root\>"          查看/etc/passwd 目录下(用^锚定行首 用\< \>锚定一个单词 )root开头的行 示例:cat  /etc/passwd | grep “[[:space:]]\+”$         查看/etc/passwd 目录下结尾是空白的行 注意区分 没有用到下面一行的命令
\<  \>   锚定一个单词的词首词尾 ^$  空行  ^[[:space:]]*$ 空白行

#扩展正则表达式

#扩展正则表达式去正则表达式的区别是扩展正则表达式中新添加了几个与正则表达式有区别的新内容

?   0次或者1次 {m}  匹配m次   m是正常数字
+    1次或者多次 {m,n}   至少m  至多n次  m和n都是数字 但是n要大于m

用法是一样的 就不在举例说明

# grep命令

# 作用:作为强大的文本搜索工具,它能使用这则表达式搜索文本,并把匹配的打印出来。

选项

-v     显示不被pattern匹配到的行
示例:cat /etc/passwd | grep -v root                显示/etc/passwd 目录下不包含root的行
-i      忽略字符大小写
示例:cat /etc/passwd | grep -i ROOT           显示/etc/passwd 目录下包含root的行  不区分大小写
-o     仅显示匹配到的字符串
示例:cat /etc/passwd | grep -o root             仅显示/etc/passwd 目录能匹配到的几个root   别的不会显示
-c     统计匹配到的行数
示例:cat /etc/passwd | grep -c root             仅显示/etc/passwd 目录下有几行能匹配到root  如只有两行包含root  那结果只会显示”2“
-e     同时实现多个选项间的逻辑or关系   例 grep -e "cat" -e "dog"
查找文件下面有没有cat 或dog这两个字符串 有一个显示一个 有两个显示一双
-n    显示匹配到的行号     (上面这几个选项常用)
示例:cat /etc/passwd | grep -n root             结果如果只有第五行和第六行包含root  那会在这两行前面第五行前面标5 第六行前面标6
-F    相当于fgrep
fgrep不支持正则表达式
-q    静默模式 不输出任何信息
输出结果不会有任何显示 有自己的适用场景
-E    使用ERE
相当于适用egrep
--color  对匹配到的文本着色显示
在CentOs7上默认会显示颜色 7以下的系统会用到这个命令

#习题

#每题不止一种写法 这里只写一种作为举例

#显示/proc/meminfo文件中以大小s开头的行

例:cat /proc/meminfo | grep "^[sS]"

SwapCached: 0 kB

SwapTotal: 1952764 kB

SwapFree: 1952764 kB

Shmem: 22500 kB

Slab: 317344 kB

SReclaimable: 252192 kB

SUnreclaim: 65152 kB

#找出“netstat -tan” 命令的结果中以‘LISTEN’ 后跟多个空白符结尾的行

例:netstat -tan | grep "LISTEN[[:space:]]\+$"(貌似看不太出来 其实每行后面都有空白的部分)

netstat -tan    |     grep "LISTEN [[:space:]]       \+          $"

管道重定向               空白字符         至少一次     行尾锚定

tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN

tcp6 0 0 :::22 :::* LISTEN

tcp6 0 0 ::1:631 :::* LISTEN

tcp6 0 0 ::1:25 :::* LISTEN

#利用df和grep,取出磁盘各分区利用率,并从大到小排序

例:df -h | grep -o "[[:digit:]]\+%" | grep -o "[0-9]\{1,2\}" | sort -nr

df -h                  |               grep -o

显示磁盘使用率    管道重定向    只显示搜索的特定内容

"[[:digit:]]     \+            %"     |   grep -o      "[0-9]          \{1,2\}"

十进制数字     最少一次    数值后面用%结尾          显示0-9之间 一位或者两位数

| sort -nr

给找到的数值排序 用数字由大道小的方式排序

#将此字符串:welcome to beijing 中的每个字符去重并排序,重复次数多的排到前面

echo "welcome to beijing " | egrep -o "[[:alpha:]]" | sort | uniq -c | sort -nr

(最后的最后答案写出来了 如果不太明白解释自己去查吧 ok)

时间: 2024-11-05 08:59:50

正则表达式及grep的相关文章

文本处理工具与正则表达式、grep

一.文本处理工具 1.文本查看命令 cat [OPTION]- [FILE]- -n 显示行号 -b 空格行不加行号,有字符的行才加 -s  相邻的空行压缩为一行,长和-n联用 -v 处理windows中的^M -T 可以看到tab\space -A  显示所有控制符(包括windows文本中的^M,^T) -E  显示行结束符$ (回车) tac [OPTION]- [FILE]-  将每个指定文件按行倒置并写到标准输出. 效果与cat 相反 rev  将指定文件从最后一个字符开始显示到第一个

正则表达式和grep命令的用法

正则表达式和grep命令的用法: 一.正则表达式: 正则表达式(也称为regular Expression,简称RE)就是由普通字符(例如字符a到z)以及特殊字符(称之为元字符)组成的文字模式. 该模式描述在查找文字主体时待匹配的一个或多个字符串. 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表示通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序.vim.gr

正则表达式与grep、sed工具使用简介

正则表达式与grep.sed工具使用简介 一.正则表达式     正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 其介绍如下:      \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 * 匹配前面的子表达式任意次 + 匹配前面的子表达式一次或多次(大于等于1次) ? 匹配前

文本处理之正则表达式和grep

Linux是基于文件的系统,可以认为Linux的所有命令都是对文件的操作(有些操作的是变量),熟练掌握Linux的文本处理工具是所有学习linux所必需要掌握的,尤其是准备跨入Linux行业的同学更是如此,在工作中我们将会遇到非常多而且内容庞大的文本,批量处理和精确定位将成为工作的日常操作.有时即使我们已经掌握了所有的文本处理工具,面对繁杂的文本也会感到无从着手,这是很正常的,Linux文本处理技巧是需要时间和练习去不断积累的,所以不要感到疲倦,下面来梳理一下日常中常见到的命令吧. 一.Linu

linux初学之——正则表达式及grep系

grep  sed   awk 被称为文本处理三剑客,本篇主要讲下grep. grep: Global search Regular Expression and Print out the line 利用正则表达式进行全局搜索并将匹配的行显示出来: 想要对grep进行深入了解就要先对正则表达式进行初步认知和学习,接下来,我们先介绍下正则表达式. 正则表达式 正则表达式:是一类字符所书写出的模式(pattern):元字符:不表示字符本身的意义,用于额外功能性的描述. 正则表达式元字符: 基本的正

关于 文本处理工具、正则表达式、grep 的简单举例

文本处理工具 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看命令:cat,tac,rev cat [选项] [file] cat -n     对显示出的每一行进行编号 cat -b     非空行编号 cat -ns    连续压缩空行成一行 cat -v     显示回车符 cat -E     显示行结束符$ cat -A     显示所有控制符 tac file   反向显示内容 rev file   反向显示

正则表达式 与grep

正则表达式与grep          (前半部分为理解概念,后面是应用实例) 什么是正则表达式: 正则表达式:Regular Expression, REGEX 是由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能: 什么是grep: grep: Global search REgular expression and Print out the line.Gloal search REGEX 文本搜索工具,根据用户指定的"模式(pattern)&q

正则表达式与grep命令

一.引言 介绍Linux系统中的两个命名:grep,egrep.要想使用这2个命令要先学会使用正则表达式,在介绍正则表达式之前,先说明一下,大家都熟知的在word中使用的通配符,即: *:表示任意长度任意字符. ?:表示任意单个字符. 记住上面这两个字符所表示的意思,后面还会在正则表达式里出现,但意义不同. 1.正则表达式:Regular Expression,REGEXP 由一类特殊字符及文本字符所编写的模式,其有些字符不表示字面意义,而是用于表示控制或通配的功能: 元字符分两类: 基本正则表

【实例】正则表达式利用grep和sed处理日志内容,获取所需的内容

[实例]正则表达式利用grep和sed处理日志内容, 获取所需的内容 app.log文件内容: 2014-09-11 00:00:01,516 INFO [com.tt.bb.thread.Control] - Socket连接:/182.105.83.33:532172014-09-12 10:00:06,555 INFO [com.tt.bb.thread.Control] - Socket连接:/182.113.83.51:53249 2014-09-13 20:00:11,587 INF