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地址打印出来
也就是说用命令将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
- ASP.NET Core集成现有系统认证
- Redis(2):常用命令详解
- C#移动跨平台开发(2)Xamarin移动跨平台解决方案是如何工作的?
- Ruby(3):基本语法中
- Python(3):文件读写与异常
- 向ASP.NET Core迁移
- Gitlab CI 自动部署 asp.net core web api 到Docker容器
- 从XMLHttpRequest请求响应里getResponseHeader(header)报错:Refused to get unsafe header "**" 问题解决
- 全面理解 ASP.NET Core 依赖注入
- jq实现上传头像并实时预览功能
- 初探领域驱动设计(2)Repository在DDD中的应用
- js取整并保留两位小数的方法
- 异步编程 In .NET
- 判断标签是否包含class的方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 第六章 函数式编程
- 第七章 错误处理和资源管理
- 【赵渝强老师】MySQL的闪回
- 第八章 go单元测试--表格驱动测试, 性能测试
- 第八章--实际项目性能分析--pprof分析beego项目的性能
- 第八章 测试与性能调优--生成文档和测试示例代码
- 第九章 goroutine
- 第十一章 http标准库和其他标准库
- 第十一章 运用广度优先搜索走迷宫
- 第十三章 go实现分布式网络爬虫---单机版爬虫
- 第十五章 并发版爬虫第二版 -- 完结
- 第十六章 分布式爬虫--准备工作
- go 搭建并行处理管道
- 新一代基于大数据的管理信息系统(MIS)报表需求开发
- 3. docker-compose实战--ghost app