您的位置:首页 > 运维架构 > Shell

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:只统计字符数,包括换行符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式 awk sed cut wc