怕会弄混系统符号和正则符号,分开记录在开头

正则符号进行匹配文件内容时是以单个字符进行匹配的,是搜索内容的。
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中的正则表达式相关推荐

  1. linux正则表达式的使用方法,Linux中基本正则表达式

    正则表达式 的 Linux中基本正则表达式 字符匹配: .  :匹配任意单个字符 [] :匹配指定范围内的任意单个字符: [^]:匹配制定范围外任意单个字符 [:digit:] lower upper ...

  2. linux 常用正则表达式,Linux中基本正则表达式

    字符匹配: .  :匹配任意单个字符 [] :匹配指定范围内的任意单个字符: [^]:匹配制定范围外任意单个字符 [:digit:] lower upper alpha alnum space 匹配次 ...

  3. Linux中使用正则表达式进行文本匹配

    文本: 哈利波特第一部,<哈利波特与魔法石>,Harry.txt grep --color -E "le" Harry.txt --color : 匹配到的字符用颜色标 ...

  4. linux按目录名查找目录_如何在Linux中查找目录?

    linux按目录名查找目录 Linux provides different ways to find directories. Here we will look at how to find di ...

  5. linux命令行 正则,在Linux命令行中使用正则表达式

    上一节我们介绍过grep命令在搜索文本信息时的基本用法,其实,grep命令还可以配合正则表达式执行更加复杂的搜索操作. 本节我们将对如何在Linux命令行中使用正则表达式进行介绍. 所谓正则表达式,就 ...

  6. 在linux下,如何在C语言中使用正则表达式

    http://hi.baidu.com/d_south/blog/item/9d22a34b1fc2bcf483025c53.html 在linux下,如何在C语言中使用正则表达式(整理) 2008- ...

  7. 【Linux】Linux中正则表达式

    当从一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式. 以下是在基本命令中使用正则表达式的一些定义及用法 基本元字符集及其含义 ^ 匹配行首 $ 匹配行尾 . 匹配任意单个字符 * 字符*   ...

  8. linux命令 正则表达式,详解Linux命令中的正则表达式

    详解Linux命令中的正则表达式 Mark Do 2017年9月19日 暂无评论 阅读 981 次 命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式.正则表达式 ...

  9. linux c中字符替换函数,Linux C 支持正则表达式的字符串替换函数

    [root@localhost src]# cat a.c /** * Linux C 支持正则表达式的字符串替换函数 * * Author: cnscn@163.com * Homepage: ww ...

最新文章

  1. 目标意识应求成大于避败 思考时不要先意识到身不足而自我设限
  2. 《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
  3. 1768: 回文平方数(进制转换)
  4. 华为u8825d解锁工具_黔隆科技刷机教程VIVOX20PLUSA忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  5. Synchronized和Lock区别
  6. ceph 数据库_Facebook打开了动画库,Ceph在Red Hat找到了新家,等等
  7. Keil5.15版本号
  8. iOS 编写高质量Objective-C代码(五)
  9. 翻译:Swift5 使用日期类型:Date、DateFormatter、DateComponent
  10. Microsoft Visio 专业版 2019
  11. c语言编程2的10次方,疯狂编程,计算2的10万次方
  12. jdbc驱动加载失败
  13. 从0开始的spss数据分析学习之路
  14. JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)
  15. 《 2021春运人群画像分析报告 》
  16. fpga 级联fifo(VHDL)
  17. 地表最强超融合 | 揭开VxRail“隐秘的角落”
  18. 关于Bellman-Ford算法的个人理解
  19. End-to-End Learning From Spectrum Data: A DL Approach for Wireless Signal Identification(阅读笔记)
  20. conda安装第三方库

热门文章

  1. 计算机应用能力 中文字处理,职称计算机Word 2003中文字处理考试大纲
  2. 坚果Pro2识别网页链接问题
  3. html 禁止触摸事件,html5的触摸事件
  4. edge浏览器如何把网页放到桌面_win10怎么把网页放在桌面上
  5. Phonetic symbol 清辅音 - θ 与 s
  6. C#实现HDMI音视频采集和处理
  7. Mac安装Adobe Zii5.3.0过程
  8. AMBA总线-结合axi-vip对axi4协议的理解1
  9. html select 选中触发,实现select中指定option选中触发事件
  10. mac 挂载 EFI 分区