Shell基础(四):正则表达式、cut、awk、sed命令
2016-03-11 11:04
731 查看
前言:
正则表达式是描述字符排列和匹配模式的一种语法规则。主要用于字符串的模式分割、匹配、查找及替换。(主要为了模糊匹配)1、正则表达式与通配符区别
①通配符(* ? [])用来匹配符合条件的文件名,是完全匹配。ls、find、cp这些命令不支持正则表达式,支持通配符匹配。②正则表达式用来匹配在文件中的字符串,是包含匹配。grep、awk、sed等命令支持正则表达式。
2、基础正则表达式
①“*”前一个字符匹配0次或任意多次“a*”
匹配所有内容,包括空格
“ab*”
匹配包含ab、abb、abbb...等字符的字符串,“*”只对b起作用
“abc*”
匹配包含abc、abcc、abccc...等字符的字符串
②“.”匹配除了换行符外任意一个字符
“s..d”
匹配s和d之间有两个字符的
“ s.*d ”
匹配s和d之间有任意多字符
③“^”匹配行首,“$”匹配行尾
“^a”
匹配以a开头的行
“$a”
匹配以a结尾的行
“^$”
匹配空白行
④[]匹配中括号中指定的任意一个字符
“a[bcd]f”
匹配abf、acf、adf中的一个
“^[0-9]”
匹配数字开头的行
⑤[^]匹配空号中字符以外的一个字符
“^[^0-9]”
匹配以非数字开头的行
“^[^a-zA-Z]”匹配非字母开头的行
⑥“\”转义字符,使之后的一个特殊字符变为普通字符
“\*”
就是普通字符*
“\$$”
匹配以$结尾的行
⑦“\{n\}”匹配前面字符出现n次的字符串
“a\{4\}”
连续出现4个a的行
“[0-9]\{4\}”连续出现4个数字的行,不一定完全一样的数字
“a\{2,5\}”
a最少出现2次,至多出现5次的行
例:
“[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}”匹配格式为1991-04-15的日期
“[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}”匹配格式为192.168.1.103的IP地址
3、字符截取命令
3.1 cut命令cut命令用于列提取,默认分隔符是tab键。
选项:-d指定分隔符,-f指定提取第几列
例:cut -t ":" -f1 /etc/passwd 已:为分隔符提取文件的第一列
grep "/bin/bash" /etc/passwd | grep -v root | cut -f1 -d ":" 列出系统中普通用户的用户名
3.2 awk命令
①语法格式:awk '条件1{动作1}条件2{动作2}...' 文件
条件,一般使用关系表达式作为条件,如a>10。动作,格式化输出或流程控制语句
awk一次读入一整行,默认以tab键或者空格为分隔符将一行分为多个字段,表示为$1、$2、$3...其中$0表示文件名
例:awk '{printf $2 "\n"}' /etc/passwd
打印文件的第二列,其中的转义字符要加双引号
df -h | grep "/dev/sda5" | awk '{print $5}' | cut -d "%" -f1 显示某分区磁盘使用量百分比
awk '$3>60{printk $4}' filename
关系运算符成立才执行括号中命令
②BEGIN、END作为关系表达式,表示命令执行开始时和结束时
例:awk 'BEGIN{FS=":"}{print $1 "\t" $3}' /etc/passwd 开始执行时FS指定分隔符
awk 'END{print "goodbye"}{print $2}' filename 结束时打印一句话
③补充:格式化输出printf、print
格式:printf '输出类型输出格式' 输出内容
输出类型:%ns,输出n个字符串。%ni,输出n个整数。%m.nf,输出浮点数,n为小数位数,m-n为整数位数
输出格式:\n换行、\r回车、\a输出警告声、\t水平制表符、\v垂直制表符、\b退格符、\f清屏符
print与printf不同之处在于,print自带换行符,比较方便
3.3 sed命令
sed命令主要用来将数据进行选取、替换、删除、新增的命令
sed [选项] '动作' 文件名
选项:-n:只会将sed处理的行输出,否则默认全篇输出
-e:允许进行多个动作
-i:sed修改默认是临时修改,-i选项表示直接修改文件
动作:a:追加,在当前行后添加
c:行替换
i:在当前行前插入
d:删除指定行
p:打印输出指定行
s:字符串替换,格式:行范围s/旧字符串/新字符串/g
例:sed - n '2p' filename 打印输出第二行
sed -i '2,4d' filename 删除2至4行
sed -i '2a helloworld' filename 第二行追加内容
sed -i '3c helloworld' filename 替换第3行
sed -i '3i helloworld' filename 在第3行前插入
sed -i '2s/goodbye/goodnight/g' filename 第2行的goodbye替换为goodnight
sed -ie 's/Sunday/Monday/g;s/Tuesday/Saturday/g' filename 同时多个动作
3.4 sort、wc命令
①sort命令用来排序
sort [选项] 文件名
选项:
-f:忽略大小写
-n:以数值型进行排序,默认是字符串排序
-r:反向排序
-t:指定分隔符,默认分隔符是tab键
-k n[,m]:指定排序的字段范围,n字段开始,m字段结束(可选),默认是到结尾
例:sort /etc/passwd 按首字母排序
sort -t ":" -k "3,3" /etc/passwd 指定冒号为分隔符,以第3字段为排序依据
sort -n -t ":" -k "3,3" /etc/passwd 指定以数字型排序,若以字符串形式排序是先判断第一个字符的顺序,第一个字符相
同再判断第2个字符,以此类推
若以数值排序优先级:1>2>3>12>23>137>258
若以字符排序优先级:1>12>137>2>23>258>3
②wc命令 统计命令
wc [选项] 文件名
-l:只统计行数
-w:只统计单词数
-m:只统计字符数,包括换行符
相关文章推荐
- msql 正则表达式
- 正则表达式
- cut命令
- 使用 sed 命令查找和替换文件中的字符串的 16 个示例
- 文本处理工具AWK详解
- Linux下使用sed编辑器详解
- Sed 命令完全指南
- Mootools 1.2教程 正则表达式
- 批处理FINDSTR正则表达式用法实例分析
- vbs正则表达式代码
- C#正则表达式Regex类的常用匹配
- C#中利用正则表达式将人民币金额转换为大写汉字
- C#使用正则表达式实现首字母转大写的方法
- awk简介与学习笔记收集第1/3页
- php中看实例学正则表达式
- PHP正则表达式之定界符和原子介绍
- PHP下常用正则表达式整理
- 批处理 正则表达式(findstr) 整理
- 详解C#正则表达式Regex常用匹配