shell编程之正则表达式

1 正则表达式的概念

正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割、匹配、查找及替换操作。

2 正则表达式与通配符

-正则表达式用来在文件中匹配符合条件的字符串,是包含匹配(即只要有就能匹配到,比如查a,那么a,ab,abc都能查出来)。grep,awk,sed等命令支持正则表达式。
-通配符用来匹配符合条件的文件名,是完全匹配(必须一样才能匹配到,比如查a,那么a,ab,abc中只有a都能查出来).ls,find,cp这些命令不支持正则表达式,所以只能用shell自己的通配符来匹配了。

3 基础正则表达式

这里写图片描述
使用示例:

匹配日期格式:YYYY-MM-DD  
[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
匹配ip地址:
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}

4 字符截取命令

4.1 cut命令

cut命令是用来在文件中提取列的,grep是用来提取行的命令。它可以根据文件的列号以及分隔符来提取。故经常用在像数据库中表一样有固定结构的文件的提取。

cut [选项] 文件名
    -f 列号 提取第几列(可以同时指定多列,用,分隔。比如1,3,4    -d 分隔符 按指定分隔符分隔列(若不指定此参数则默认按制表符Tab分隔,若找不到指定分隔符则全部显示)

用法示例:提取系统中非root的用户

cat /etc/passwd | grep "bin/bash"| grep -v "root"| cut -f 1 -d ":"

4.2 awk命令

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。我们在这里只是对它进行简单的学习使用。

awk '条件1{动作1}条件2{动作2}' 文件名
    条件:一般使用关系表达式作为条件 如x>1之类的
    动作:格式化输出,流程控制语句等

执行过程:
条件1满足那么执行动作1,条件2满足那么执行动作2,以此类推。
awk命令执行时,是从第一行开始一行一行的进行输出,首先是将第一行的所有字段自动变成一个又一个变量(也就是先读取数据,然后放入指定的变量),然后判断条件是否成立,成立的话执行动作,每一行都重复执行相同的操作。没条件的话就相当于条件为真,直接执行动作。
用法示例:查看文件系统根分区的使用占比:

df -h | grep "/$" | awk '{print $5}'

4.3 sed命令

sed是一种几乎包含在所有UNIX(包括Linux)平台上使用的轻量级的流编辑器。它主要用来将数据进行选取,替换,删除,新增。

sed [选项] '[动作]' 文件名
选项:
-n 只输出经过sed处理过的行到屏幕
-e 允许一次应用多个动作(用;隔开)
-i 直接修改文件,并且不由屏幕输出

动作:
a : 追加,在当前行后添加一行或多行
c : 整行替换
i : 插入,在当前行前插入一行或多行
d : 删除,删除指定的行
p : 打印
s : 字串替换(替换格式与vim中的类似) '行范围s/旧字串/新字串/g'

使用示例:对student.txt文件的操作
id name sex
1 rose man
2 jack woman
3 agan man

查看文件第二行: sed -n '2p' student.txt
删除整行:sed '2,4d' student.txt   表示删除输出内容的二到四行,没有加-i选项,所以文件内容不变
追加内容:sed '2a 4 zhangsan man' student.txt  在第二行后面换行追加内容
插入内容:sed '2i 4 zhangsan man' student.txt   在第二行前面新插入一行内容
替换整行:sed '2c 4 zhangsan man' student.txt   将输出内容的第二行替换成指定内容
替换单个字符或者字符串:sed '2s/rose/rousi/g' student.txt   将第二行的“rose”替换成“rousi”,如果不指定行范围则搜索整个文件内容
同时替换多个字符串:sed -e 's/1/10/g;s/2/20/g' student.txt  用分号“;”将动作隔开

5 字符处理命令

5.1 sort排序命令

sort [选项] 文件名
-f 忽略大小写
-n 以数值型进行排序,默认使用字符串排序
-r 反向排序
-t 指定分隔符,默认是制表符
-k n[,m] 按照指定的字段范围排序.从第n字段开始,m字段结束(默认到行尾)

示例:

sort -t ":" -k 3,3 /etc/passwd  以:作为分隔符,用第三列排序

5.2 wc统计命令

wc [选项] 文件名
选项:
-l 只统计行数
-w 只统计单词数
-m 只统计字符数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值