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 只统计字符数