Linux系统正则表达式

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Linux系统正则表达式

Linux系统正则表达式的介绍

学习Linux系统的朋友们肯定都会接触到正则表达式,或者开发人员也会遇到这个东东,说起正则表达式,使我想起“会者不难,难者不会”这句话,的确如此,相信很多人刚接触正则表达式,肯定一头雾水,觉得很难学会,是的,民工哥也是这么个感觉,但是相信大家都认真去学习、去练习,肯定能学会的。

那么今天就来聊一聊正则表达式

何谓正则表达式呢?网上一堆的名词介绍,大家可以自己查找,民工哥的理解是:首先它是一种文本模式,然后它的作用就处理字符串的一种方法

给定一个正则表达式和另一个字符串,我们可以达到如下的目的

  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)

  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分

正则表达式的特点是:

  1. 灵活性、逻辑性和功能性非常的强

  2. 可以迅速地用极简单的方式达到字符串的复杂控制

  3. 对于刚接触的人来说,比较难懂

因些我们也是有必要了解下正则需要用到的字符含义

**** 转义符,就是将特殊符号的意义去除掉****

.任意一个字符

***** 重复零个或者多个前的一个字符***

{n,m连续n到m个前一个重复字符

[ ]字符集合

****.匹配所有字符***

^匹配以以某字符开头

$匹配以以某字符结尾

[^]取反

*^.匹配多个任意字符开头

|或

[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字

[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字

d匹配一个数字字符

w匹配包括下划线的任意单词字符

grep  文本搜索工具

**** grep 参数 查找条件 文件名****

主要参数:

-c:只输出匹配行的计数

-I:不区分大 小写(只适用于单字符

-l:查询多文件时只输出包含匹配字符的文件名

-n:显示匹配行及 行号

-s:不显示不存在或无匹配文本的错误信息

-v:显示不包含匹配文本的所有行

sed 在线编辑工具

[root@Centos bbs]# man sed

NAME

       sed - stream editor for filtering and transforming text

用于过滤或转换文本的流编辑器

sed 参数 动作

主要参数:

-n:取消默认输出

-i:修改文件内容

动作:

p 打印

d 删除

s#x#xx#g 替换与全局替换  将X全局替换掉XX

awk  文本处理工具

[root@Centos /]# man awk

NAME

       gawk - pattern scanning and processing language

awk ‘条件1 {动作1} 条件2{动作2}……..’    文件名

-F 使用分隔符

==等于

NR     取行

grep、sed、awk的参数非常的多,大家有兴趣可以慢慢研究,查看帮助文档

举例说明

例一:将系统用ifconfig命令列出的信息中eth0的IP地址打印出来

Linux系统正则表达式 也就是说用命令将192.168.1.2输出在屏幕上

方法一:

[root@Centos /]# ifconfig eth0 |grep “inet addr”

          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0

首先将带有IP地址行过滤打印出来,然后再进行过滤取出IP地址

[root@Centos /]# ifconfig eth0 |grep “inet addr”|awk -F ‘[ :]+’ ‘{print $4}’

192.168.1.2

以空格和:做为分隔符,+代表前面多个重复的分隔符识为一个,将第四列打印

方法二:

[root@Centos /]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:AA:CA:2B  

          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:7005 errors:0 dropped:0 overruns:0 frame:0

          TX packets:3095 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:709421 (692.7 KiB)  TX bytes:454116 (443.4 KiB)

[root@Centos /]# ifconfig eth0|awk -F ‘[ :]+’ NR==2                取整个内容第二行

          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0

[root@Centos /]# ifconfig eth0|awk -F ‘[ :]+’ ‘NR==2 {print $4}’      打印第四列

192.168.1.2

方法三:

[root@Centos /]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:AA:CA:2B  

          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:7271 errors:0 dropped:0 overruns:0 frame:0

          TX packets:3244 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:733402 (716.2 KiB)  TX bytes:473258 (462.1 KiB)

[root@Centos /]# ifconfig eth0|**sed -n 2p      ****  **将第二行打印

          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0

[root@Centos /]# ifconfig eth0|sed -n 2p|*sed ‘s#^.addr:# #g’

 192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0

*将以空格.(前任意字符)addr:开头的内容替换成空输出

[root@Centos /]# ifconfig eth0|sed -n 2p|sed ‘s#^.*addr:# #g’|*sed ‘s#  Bcast.$# #g’ ****                  ***将以两空格Bcast.(后任意字符)结尾的内容替换成空输出

 192.168.1.2 

方法四:

[root@Centos /]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:AA:CA:2B  

          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:feaa:ca2b/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:7723 errors:0 dropped:0 overruns:0 frame:0

          TX packets:3434 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:776543 (758.3 KiB)  TX bytes:493886 (482.3 KiB)

[root@Centos /]# ifconfig eth0|sed -n ‘*s#^.addr:(.)  Bcast.$#1#gp**’

192.168.1.2

将需要的内容匹配到()中,然后将()中的内容打印出来

例二:将/目录下etc目录的权限转换成数字输出

方法一:

[root@Centos /]# stat /etc      stat获取文件或目录的属性信息

  File: `/etc’

  Size: 12288           Blocks: 24         IO Block: 4096   directory

Device: fd00h/64768d    Inode: 2883585     Links: 116

Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2016-08-21 11:07:01.802852859 +0800

Modify: 2016-08-21 11:06:44.569852839 +0800

Change: 2016-08-21 11:06:44.569852839 +0800

[root@Centos /]# stat /etc|sed -n 4p

Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)打印第四行

[root@Centos /]# stat /etc|sed -n 4p|cut -d “(“ -f2        以(为分隔符打印第二列

0755/drwxr-xr-x)  Uid: 

[root@Centos /]# stat /etc|sed -n 4p|cut -d “(“ -f2|cut -d “/“ -f1 

0755                                                                           以/为分隔符打印第二列

方法二:

[root@Centos /]# stat /etc|sed -n 4p|cut -d “(“ -f2|cut -c 2-4

755                       以(分隔符取第二列,然后再取2-4个字符

方法三:

[root@Centos /]# stat /etc|sed -n 4p|awk -F ‘(‘ ‘{print $2}’|awk -F ‘/‘ ‘{print $1}’

0755                    以(分隔符打印第二列|以/分隔符打印第一列

方法四:

[root@Centos /]# stat /etc|sed -n 4p             **       打印第四行**

Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

[root@Centos /]# stat /etc|sed -n 4p|awk -F ‘[(/]’ ‘{print $2}’        指定多分隔符

0755

方法五:其实stat 命令本身就有参数可以直接获取

[root@Centos /]# stat -c %a /etc

755

[root@Centos /]# stat -c %a /root

550

[root@Centos /]# stat -c %a /tmp

1777

Linux系统正则表达式
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Linux系统正则表达式


 上一篇
Linux基础命令(之二)详解 Linux基础命令(之二)详解
Linux基础命令(之二)详解 此前介绍了linux系统中一些学用的命令,当然最基础的命令可远远不止这些,所以今天还是得聊一聊其它的一些的基础命令 1、cp(copy files and directories)拷贝文件或目录 cp  源文
2021-04-05
下一篇 
Linux系统定时任务(crond) Linux系统定时任务(crond)
Linux系统定时任务(crond) 一:定义 crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件 1、linux系统自身定期执行的任务(轮询系统日志、备份数据等) 2、用户执行的任务(定时更新同步时间、网站数据备份
2021-04-05