Shell脚本之正则表达式

前言

正则表达式分为标准正则表达式和扩展正则表达式。
正则表达式就是使用单个字符串来描述匹配一系列符合某个句法规则的字符串,一般是通过一些特殊符号,实现快速查找,删除,替换某个特定字符串

标准正则表达式

组成:

普通字符:大小写字母,数字,标点及一些其他符号
元字符:具有特殊意义的专用字符

基础表达式中的元字符

:转义符,使元字符当成普通字符使用
^:匹配字符串的开头
$:匹配字符串的结尾
.:匹配除\n以外的任意字符
*:匹配前面子表达式0次或者多次
[list]: 匹配list列表中的一个字符
[ ^list] :匹配任意不在list列表中的一个字符
{n,m} 匹配前面的子表达式n到m次,有{n}、{n,}、{n,m}三种格式

基础正则表达式grep

-n 表示显示行号
-i 表示不区分大小写
-v 表示反向过滤

grep -n 'the' test.txt				#过滤带有'the'的行
grep -vn 'the' test.txt			#过滤不带'the'的行
 grep -n 'sh[io]rt' test.txt		#过滤带有'shot'跟'shit'的行
grep -n 'oo' test.txt				#过滤带'oo'的行
grep -n‘[^a-z]oo’test.txt		#过滤'oo'前面不存在小写字母的行
grep -n '^the' test.txt			#过滤以'the'开头的行
grep -n '^[a-z]' test.txt			#过滤以小写字母开头的行
grep -n '\.$' test.txt				#过滤以'.'结尾的行
grep -n '^$' test.txt				#过滤空白的行
grep -n 'o\{2\}' test.txt			#查询两个'o'的字符
grep -n 'wo\{2,\}d' test.txt		#查询'w'开头以'd'结尾,中间包含2个或2个以上'o'的字符串.
文本处理器—sed

sed [选项] ‘操作’ 参数选项
选项:
-e 用指定命令或者脚本来处理输入的文本文件
-f 用指定的脚本文件来处理输入的文本文件
-h 显示帮助
-n 仅显示处理后的结果
-i 直接编辑文本文件

操作:
a 增加,在当前行下面增加一行指定内容
c 替换,将选定行替换为指定内容
d 删除,删除选定的行
i 插入,在选定的行上面插入一行指定内容
p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出.其通常与"-n"选项一起使用
s 替换,替换指定字符
y 字符转换

扩展正则表达式

元字符 作用
+: 重复一个或者一个以上的前一个字符
?: 零个或者一个的前一个字符
( ) :查找“组“字符串
( ) + :辨别多个重复的组

awk内建变量

FS :指定每行文本的字段分隔符,默认为空格或制表位
NF :当期处理的行的字段个数
NR :当前处理的行的行号
$0 :当前处理的行的整行内容
$n :当前处理的行的第n个字段
FILENAME :被处理的文件名
RS :数据记录分隔符,默认为\n,即每行为一条记录

awk  ‘{print}’  test.txt      #输出所有内容,等同于cat  test.txt
awk  ‘{print  $0}’  test.txt     #输出所有内容
awk  ‘NR==1,NR==3{print}’  test.txt   #输出第1~3行内容
awk  ‘(NR>=1)&&(NR<=3){print}’  test.txt   #输出第1~3行内容
awk  ‘NR==1 || NR==3{print}’  test.txt   #输出第1行第3行内容
awk  ‘(NR%2)==1{print}’  test.txt      #输出奇数行内容
awk  ‘(NR%2)==0{print}’  test.txt      #输出偶数行内容
awk  ‘/^root/{print}’  /etc/passwd    #输出以root开头的行
awk  ‘/nologin$/{print}’  /etc/passwd     #输出以nologin结尾的行
awk  ‘BEGIN  {x=0};/\/bin\/bash$/{x++};END {printx}’  /etc/passwd   #统计以/bin/bash结尾的内容
awk  ‘BEGIN{RS=””};END{print NR}’  test.txt  #统计以空行分隔的文本段落数
awk  -F:  ‘/bash$/{print  |  “wc  -l”}’  /etc/passwd     #调用wc  -l命令统计使用bash的个数,等同于grep  -c  “bash$”  /etc/passwd
awk  ‘BEGIN  {while  (“w”  |  getline)n++;{print  n-2}}’   #调用w命令,并用来统计在线用户数
awk  ‘BEGIN  {“hostname”  |  getline;print  $0}’    #调用hostname,并输出当前的主机名

sort工具

依据不同的数据类型进行排序:字符排序(默认)、数字排序
sort [选项] 参数
-f :忽略大小写
-b :忽略每行前面的空格
-M :按照月份进行排序
-n :按照数字进行排序
-r :反向排序
-u :等同于uniq,表示相同数据仅显示一行
-t :指定分隔符,默认使用[tab]键分隔
-o :将排序后的结果转存至指定行
-k :指定排序区域

uniq 工具

uniq工具在Linux系统中通常与sort命令使用,用于报告或者忽略文件中的重复行
uniq [选项] 参数
-c 进行计数;
-d 仅显示重复行;
-u 仅显示出现一次的行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值