linux中的正则表达式
怕会弄混系统符号和正则符号,分开记录在开头
正则符号进行匹配文件内容时是以单个字符进行匹配的,是搜索内容的。
find 命令是搜索文件名的。
容易混乱的地方:
grep -E “^oldboy” 根据文件内容进行单个字符的匹配,但是先决条件就是你搜索的条件–ol
然后加上-w 后就是还是用单词进行匹配,没有ol的单词所以就没有显示。
系统符号
$ 用于取出变量中的内容 用于取出指定列中的信息 命令提示符
! 用于表示取反或排除的意思 表示强制处理
# 表示文件内容注释符号 表示用户命令提示符号
$()==`` 表示命令执行结果留下,用于其他命令调用
"" 表示输入内容就是输出内容,但是部分信息会被解析
'' 表示输入内容就是输出内容,所见即所得
`` 表示执行结果留下,用于其他命令调用>> 标准输出重定向符号
> 标准输出追加重定向
2> 错误输出重定向
2>> 错误输出追加重定向
.. 上级目录
. 这级目录
&& 前一个命令执行成功后执行&&后面的命令
|| 前一件事执行失败了再执行||后面的命令
;不管前面的命令是否成功,都会执行分好后面的命令
正则符号
^ 以什么开头
$ 以什么结尾
. 匹配一个字符
* 匹配一个或多个字符
\ 转义字符
[] 匹配
[^] 排除+ 匹配符号前面一个字符连续出现1次或多次
? 出现0次或1次
{} 指定次数{n,m}最少n次最多m次
| 和
() 汇总一个整体 后项引用前项
正则表达式的概念:
1.正则符号用于匹配字符信息
2.正则符号主要匹配文件内容信息
3.正则符号只有三剑客命令可以识别
4.正则符号用于分析数据
补充:
如何查看一行后面有没有空格
cat -A 文件信息
vim :set listgrep -v "^$" /etc/selinux/conf 利用v进行取反,排除空行显示
正则去除空行和注释
[root@localhost ~]# grep -Ev "^$|^#" /etc/hostname
localhost.localdomain
查看以d结尾的内容
[root@localhost ~]# grep "d$" /etc/selinux/config
SELINUX=disabled[root@localhost ~]#
[root@localhost ~]#
查看#号开头的信息
[root@localhost ~]# grep "^#" /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
[root@localhost ~]#
查看一行后面有没有空格
[root@localhost ~]# cat -A /etc/selinux/config
$
# This file controls the state of SELinux on the system.$
# SELINUX= can take one of these three values:$
# enforcing - SELinux security policy is enforced.$
# permissive - SELinux prints warnings instead of enforcing.$
# disabled - No SELinux policy is loaded.$
SELINUX=disabled$
# SELINUXTYPE= can take one of three two values:$
# targeted - Targeted processes are protected,$
# minimum - Modification of targeted policy. Only selected processes are protected. $
# mls - Multi Level Security protection.$
SELINUXTYPE=targeted $
$
$
方法2:
vim /etc/selinux/conf
set list
.符号实例
[root@localhost ~]# cat lsy.txt
gd
god
good
goood
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# grep ".d" lsy.txt
gd
god
good
goood
[root@localhost ~]# grep "g.d" lsy.txt
god
[root@localhost ~]#
- 匹配符号前面一个字符,连续出现一次或多次(在三剑客中是正则符号,在find中是通配符)
o*
[root@localhost ~]# grep "o*" lsy.txt
gd
god
good
goood
.* 是匹配任意字符
找出m开头m结尾
[root@localhost ~]# cat lsy.txt I am oldboy teacher!
I teach linux.I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.not 4900000448.
my god ,i am not oldbey,but OLDBOY![root@localhost ~]# grep "^m.*m$" lsy.txt
my blog is http://oldboy.blog.51cto.com
[root@localhost ~]#
\ 转义字符
将有意义信息变得没有意义
将没有意义的信息变得有意义
[root@localhost ~]# grep ".$" lsy.txt 匹配任意一个字符结尾的信息
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@localhost ~]# grep "\.$" lsy.txt 匹配以.结尾的信息
I teach linux.
my qq num is 49000448.
not 4900000448.
[root@localhost ~]#
\t --制表符
\n --换行符号
[root@localhost ~]# echo -e oldboy01\noldboy02
oldboy01noldboy02
[root@localhost ~]# echo -e "oldboy01\noldboy02" -e是显示高级命令
oldboy01
oldboy02
[root@localhost ~]#
\r — 类似于换行符,但是不太好用
[]是匹配单个字符
[root@localhost ~]# grep [ab] lsy.txt 匹配
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my god ,i am not oldbey,but OLDBOY!
[root@localhost ~]#
找出符号
[root@localhost ~]# grep "[^0-9A-Za-z]" lsy.txt [^] 是排除的意思,是匹配单个字符的排除
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@localhost ~]#
区别:
grep -v "[a-z0-9A-Z]" 是排除整行的信息grep -E 扩展正则符号
egrep 扩展正则符号
sed -r 扩展正则符号
区别例子
[root@localhost ~]# grep -v "[0-9]" lsy.txt I am oldboy teacher!
I teach linux.I like badminton ball ,billiard ball and chinese chess!
our site is http://www.etiantian.orgmy god ,i am not oldbey,but OLDBOY!
[root@localhost ~]# grep "[^0-9]" lsy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY
[root@localhost ~]# grep “[0-9A-Za-z]” lsy.txt -o 单行匹配输出
扩展正则符号(正则就是单个字符式的进行匹配)
+匹配符号前面一个字符连续出现1次或多次
[root@localhost ~]# grep -E "o+" test.txt -o
o
oo
ooo
oooo
ooooo
oooooo
? 匹配符号前面一个字符连续出现0次或1次
[root@localhost ~]# grep -E "o?" test.txt
gd
god
good
goood
gooood
goooood
gooooood
[root@localhost ~]#
{} 匹配符号前面一个字符连续出现指定的次数
{n,m} 匹配符号前面一个字符连续出现最少出现n次最多出现m 次
[root@localhost ~]# cat test.txt
gd
god
good
goood
gooood
[root@localhost ~]# grep -E "o{2,3}" test.txt
good
goood
gooood
[root@localhost ~]# {n} 出现指定的n次
[root@localhost ~]# grep -E "o{2}" test.txt
good
goood
gooood
[root@localhost ~]# {n,} 出现最少n次,最多没有限制[root@localhost ~]# grep -E "o{2,}" test.txt
good
goood
gooood
goooood
gooooood
[root@localhost ~]# grep -E "o{2,}" test.txt -o
oo
ooo
oooo
ooooo
oooooo
[root@localhost ~]# {,m}出现最少0次,最多出现m次
[root@localhost ~]# grep -E "o{,4}" test.txt
gd
god
good
goood
gooood
goooood
gooooood
[root@localhost ~]# grep -E "o{,4}" test.txt -o
o
oo
ooo
oooo
oooo
o
oooo
oo
[root@localhost ~]#
练习,取出正确的身份证号
[root@localhost ~]# cat test03.txt
老男孩 110109197706078765
老女孩 105110111100281236
老狗 oldboy
张三 117237
李四 123123oldboy
王五 123123619230917203710237[root@localhost ~]# grep -wE "[0-9]{18}" test03.txt
老男孩 110109197706078765
老女孩 105110111100281236
[root@localhost ~]#
因为正则是根据单个字符进行取舍的,而grep -w w参数是将单个字符的读取方式改为单词的读取方式。
| 匹配多个字符信息
[root@localhost ~]# grep -vE "^#|^$|#" /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
[root@localhost ~]#
() 1.将多个字符信息汇总成一个整体,也是改变正则符号的单个字符读取的方式,改成单词的读取方式。
2.后项引用前项信息
[root@localhost ~]# echo 123456| sed -r 's/(.*)/<\1>/g'
<123456>
[root@localhost ~]#
取出磁盘利用率
[root@localhost ~]# df -h |grep /dev/sda1 |grep -E "[0-9]{,3}%" -o
25%
说明:正则匹配一行信息时,默认有贪婪特性
如何取出文件权限数值
取出IP地址
i[root@localhost ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:fc:63:7d brd ff:ff:ff:ff:ff:ffinet 10.0.0.200/24 brd 10.0.0.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fefc:637d/64 scope link valid_lft forever preferred_lft forever
[root@localhost ~]# [root@localhost ~]# ip a s eth0 |grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" -o
10.0.0.200
10.0.0.255
讨论的问题:
{n,m}里面的m优先级高于n,人话说就是:
先匹配m 再匹配n.,但是这个先后规则是以行为单位进行作用的,如果本行内没有高于m的,则先使用n。
另外一种说法就是:
始终都是先匹配m ,但是碍于文件内容的显示机制,所以显示出来就是这样的
[root@localhost ~]# cat aaa.txt
oo
oooo
oooooooo
ooo[root@localhost ~]# grep -E "o{2,3}" aaa.txt
oo
oooo
oooooooo
ooo
截取文件权限信息数值
方法1:
[root@localhost ~]# stat /etc/hosts|sed -n '4p'
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)[root@localhost ~]# stat /etc/hosts|sed -n '4p'|sed -r 's#^.*\(0(.*)/-.*$#\1#g'
644
s###g 是sed 替换的格式
sed -r 是sed识别扩展正则的参数
^.* 是任意字符开头的
.*$ 是任意字符结尾的
\(0 是遇到(0这个信息就结束前面的任意字符开头
(.*) 是表示任意字符,加上小括号就是为了调用
这也是后面\1的意义
/- 是匹配的信息
方法2:利用命令本身截取
[root@localhost ~]# stat -c %a /etc/hosts
644
获取IP地址
[root@localhost ~]# ip a s eth0|awk 'NR==3'inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@localhost ~]# ip a s eth0|awk 'NR==3'|awk -F "[ /]" '{print $6}'
10.0.0.200
[root@localhost ~]# ip a s eth0|awk 'NR==3'|awk -F "[ /]" '{print $7}'
24
[root@localhost ~]# ip a s eth0|awk 'NR==3'|awk -F "[ /]" '{print $5}'
inet
解释:
第一步:
[root@localhost ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:fc:63:7d brd ff:ff:ff:ff:ff:ffinet 10.0.0.200/24 brd 10.0.0.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fefc:637d/64 scope link valid_lft forever preferred_lft forever
[root@localhost ~]#
第二步:取出第三行
[root@localhost ~]# ip a s eth0|awk 'NR==3'inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
第三步:以空格和/为分割为列
[root@localhost ~]# ip a s eth0|awk 'NR==3'|awk -F "[ /]" '{print $6}'
10.0.0.200
[root@localhost ~]#
本行开头有四个空格,inet后面有一个空格,也就是第五个空格,因为[ /]的意思是以空格和/为分割为列,所以IP地址是第6列,24是第7列,第5列是inet
[root@localhost ~]# ip a s eth0|awk 'NR==3'|awk -F "[ /]" '{print $7}'
24
[root@localhost ~]# ip a s eth0|awk 'NR==3'|awk -F "[ /]" '{print $5}'
inet
[root@localhost ~]#
获取IP地址
[root@localhost ~]# ip a s eth0|awk 'NR==3'inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@localhost ~]# ip a s eth0|awk 'NR==3'|awk -F "[ /]+" '{print $3}'
10.0.0.200
[root@localhost ~]# [ /]+的意思是如果以空格为分隔符则多个连续的空格为一个分割
+ 一个或多个
获取IP地址
[root@localhost ~]# ip a s eth0|awk 'NR==3'|awk -F "inet |/24" '{print $2}'
10.0.0.200
[root@localhost ~]#
获取IP地址
ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}'
awk语法:awk 参数信息 '条件{命令}'[root@localhost ~]# ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}'
10.0.0.200
[root@localhost ~]#
获取IP地址
[root@localhost ~]# ip a s eth0|sed -n '3p'inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@localhost ~]# ip a s eth0|sed -n '3p'|sed -n 's#^.*et ##gp'
10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@localhost ~]# ip a s eth0|sed -n '3p'inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@localhost ~]# ip a s eth0|sed -n '3p'|sed -n 's#^.*et ##gp'
10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@localhost ~]# ip a s eth0|sed -n '3p'|sed -n 's#^.*et ##gp'|sed -n 's#/24.*eth0$##gp'
10.0.0.200
[root@localhost ~]#
获取IP地址
[root@localhost ~]# ip a s eth0|sed -n '3p'|sed -nr 's#^.*et (.*)/24.*eth0$#\1#gp'
10.0.0.200
[root@localhost ~]# [root@localhost ~]# ip a s eth0|sed -nr '3s#^.*et (.*)/24.*eth0$#\1#gp'
10.0.0.200
获取IP地址
[root@localhost ~]# ip a s eth0|grep "inet "|egrep '([0-9]+\.?){4}' -o
10.0.0.200
10.0.0.255
正则符号与通配符号区别
通配符号:
查找文件名称信息
命令行经常使用
正则符号:
查找文件内容信息
三剑客命令经常使用/各种语言经常使用
关于筛选出来的信息的颜色显示
–color=auto/–color
linux中的正则表达式相关推荐
- linux正则表达式的使用方法,Linux中基本正则表达式
正则表达式 的 Linux中基本正则表达式 字符匹配: . :匹配任意单个字符 [] :匹配指定范围内的任意单个字符: [^]:匹配制定范围外任意单个字符 [:digit:] lower upper ...
- linux 常用正则表达式,Linux中基本正则表达式
字符匹配: . :匹配任意单个字符 [] :匹配指定范围内的任意单个字符: [^]:匹配制定范围外任意单个字符 [:digit:] lower upper alpha alnum space 匹配次 ...
- Linux中使用正则表达式进行文本匹配
文本: 哈利波特第一部,<哈利波特与魔法石>,Harry.txt grep --color -E "le" Harry.txt --color : 匹配到的字符用颜色标 ...
- linux按目录名查找目录_如何在Linux中查找目录?
linux按目录名查找目录 Linux provides different ways to find directories. Here we will look at how to find di ...
- linux命令行 正则,在Linux命令行中使用正则表达式
上一节我们介绍过grep命令在搜索文本信息时的基本用法,其实,grep命令还可以配合正则表达式执行更加复杂的搜索操作. 本节我们将对如何在Linux命令行中使用正则表达式进行介绍. 所谓正则表达式,就 ...
- 在linux下,如何在C语言中使用正则表达式
http://hi.baidu.com/d_south/blog/item/9d22a34b1fc2bcf483025c53.html 在linux下,如何在C语言中使用正则表达式(整理) 2008- ...
- 【Linux】Linux中正则表达式
当从一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式. 以下是在基本命令中使用正则表达式的一些定义及用法 基本元字符集及其含义 ^ 匹配行首 $ 匹配行尾 . 匹配任意单个字符 * 字符* ...
- linux命令 正则表达式,详解Linux命令中的正则表达式
详解Linux命令中的正则表达式 Mark Do 2017年9月19日 暂无评论 阅读 981 次 命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式.正则表达式 ...
- linux c中字符替换函数,Linux C 支持正则表达式的字符串替换函数
[root@localhost src]# cat a.c /** * Linux C 支持正则表达式的字符串替换函数 * * Author: cnscn@163.com * Homepage: ww ...
最新文章
- 目标意识应求成大于避败 思考时不要先意识到身不足而自我设限
- 《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
- 1768: 回文平方数(进制转换)
- 华为u8825d解锁工具_黔隆科技刷机教程VIVOX20PLUSA忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
- Synchronized和Lock区别
- ceph 数据库_Facebook打开了动画库,Ceph在Red Hat找到了新家,等等
- Keil5.15版本号
- iOS 编写高质量Objective-C代码(五)
- 翻译:Swift5 使用日期类型:Date、DateFormatter、DateComponent
- Microsoft Visio 专业版 2019
- c语言编程2的10次方,疯狂编程,计算2的10万次方
- jdbc驱动加载失败
- 从0开始的spss数据分析学习之路
- JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)
- 《 2021春运人群画像分析报告 》
- fpga 级联fifo(VHDL)
- 地表最强超融合 | 揭开VxRail“隐秘的角落”
- 关于Bellman-Ford算法的个人理解
- End-to-End Learning From Spectrum Data: A DL Approach for Wireless Signal Identification(阅读笔记)
- conda安装第三方库
热门文章
- 计算机应用能力 中文字处理,职称计算机Word 2003中文字处理考试大纲
- 坚果Pro2识别网页链接问题
- html 禁止触摸事件,html5的触摸事件
- edge浏览器如何把网页放到桌面_win10怎么把网页放在桌面上
- Phonetic symbol 清辅音 - θ 与 s
- C#实现HDMI音视频采集和处理
- Mac安装Adobe Zii5.3.0过程
- AMBA总线-结合axi-vip对axi4协议的理解1
- html select 选中触发,实现select中指定option选中触发事件
- mac 挂载 EFI 分区