正则表达式

正则表达式概述

元字符:描述字符的字符,它用于对字符表达式的内容、转换及各种操 作信息描述 

正则表达式:是由一系列字符和元字符构成的字符串,简称 RE(Regular Expression),它的主要功能是文本查询和字符串操作,它 可以匹配文本的一个字符或字符集合。

实际上,正则表达式完成了数据的过滤,将不符合正则表达的数据拒绝, 留下符合的

基本正则表达式元字符集合及其意义


 

特殊字符集:[[:digit:]]代表数字 [[:lower:]]小写字母 [[:upper:]]大写字母 [[:alpha:]] 代表字母[[:alnum:]] 代表数字和字母[[:space:]]代表空格

\?:匹配前面字符串0次或者1次,即可有可无(扩展)

\+:匹配前面的字符至少1次(扩展)

^PATTERN$:用于匹配整行

^$:空行

\<:词首锚定,用于单词模式的左侧

\>:词尾锚定,用于单词模式的右侧

\<PATTERN\>:匹配整个单词

( ) 表示一个字符集合或用在expr中

|  表示“或‘’,匹配一组可选的字符

"()"符号和“|”符号 "()"符号和“|”符号通常结合使用,表示一组可选字符 的集合。

re(a|b|c)d 等价于 re[abc]d

"|"符号也可以表示多个正则表达式的“或”关系

grep -E “zha?ng|zhi”(|的两边作为一个整体)

分组:\(xy\):将xy作为一组(扩展)

后向引用:引用前面的分组括号中的模式所匹配的字符,使用\1,\2,\3
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配的字符
\(ab\+\(xy\)*\)*      \1:ab\+\(xy\)*    \2:xy

特殊:在通配符中*的意思为匹配任意多个字符   ?的意思为匹配任意一个字符

Bash shell本身不支持正则表达式,使用正则表达式的是 shell命令和工具,如grep,sed,awk等。

dd命令创建一个具有特定大小的文件   

dd if=/dev/zero of=./test.txt bs=1k count=1   创建一个大小为1k的文件

grep与正则表达式

sed与正则表达式

sed概述:

sed 是一种在线编辑器,它一次处理一行内容。处理时, 把当前处理的行存储在临时缓冲区中,称为“模式空间” (pattern space),接着用sed命令处理缓冲区中的内容, 处理完成后,把缓冲区的内容送往屏幕。接着处理下一行, 这样不断重复,直到文件末尾。

语法格式:

sed [options] 'addressCommand' file ...

option:

  • -n:不再默认显示模式空间中的内容
  • -i:直接修改原文件
  • -e SCRIPT -e SCRIPT:可以同时执行多个脚本
  • -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作; 
  • -r∶sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表 示法语法) 

address:定址

  • StartLine,EndLine-->1,100
  • /RegExp/-->/^root/
  • /Pattern1/,/Pattern2/:第一次被Pattern1开始至第一次被Pattern2匹配到的行结束
  • LineNumber:指定的行
  • StartLine,+N-->从StartLine开始,向后N行

command:

  • d:删除符合条件的行
  • p:显示符合条件的行
  • a \"String":在指定的行后追加新行,内容为String
  • i:\"String":在指定的行前面追加新行,内容为String
  • r FIle:将指定的文件的内容添加至符合条件的行处
  • w FIle:将指定范围内的内容另存至指定的文件中
  • s/pattern/string/修饰符:查找并替换 (g:全局替换  i:忽略字符大小写 &:引用匹配到的串)

awk与正则表达式

awk [option] 'program' file ...

-F:指明输入时用到的字段分隔符 (默认空格)

-v: var=value:自定义变量

实例

tail -n 5 /etc/profile | awk '{print $2,$5}'
df -h | awk -F % '/^\/dev/{print $1}'|awk '{if($NF>=20) print $1}'

print
     print  item1,item2, ...
 要点:
1.用逗号进行分开;
2.在awk中如果想着进行变量替换,一般不要放到双引号中
3.item可以省略,省略的意思是print $0,显示整行

内置变量

NF:字段数量,print NF和print $NF(最后一个字段)的区别,在awk引用内部变量无需加$

NR:显示当前行的行数

FNR:各文件分别计数,awk '{print FNR}' /etc/fstab /etc/issue

printf

格式化输出:printf FORMAT, item1,item2,....

    1、FORMAT必须给出来 (输出是的格式控制)

    2、printf不会自动换行,需要显示给出换行控制符\n

    3、FORMAT需要分别为后面的每个item指定一个格式化符号

%c:显示ASCII码
%d:显示十进制证书
%e:科学计数法
%f:浮点数
%s:显示字符串
    awk -F : '{printf "username:%s\n",$1}' /etc/passwd
    awk -F: '{printf "username:%s\n uid:%d\n",$1,$3}' /etc/passwd
%u:显示无符号整数
%%:显示%自身

      4、第一个数字控制显示的宽度,第二个#表示小数点后面的精度(%3.1f),默认右对齐,-号为左对齐,+为显示字符的符号

awk -F : '{printf "username:%-15s uid:%d\n",$1,$3}' /etc/passwd

内置函数

rand():0到1之间的随机数

length():字符串长度

split (string, array, field separator)

-b:指定分割后的每个文件的大小
-d:使用数字作为后缀
-a length:制定后缀的长度
-l num:按照行进行分割
PREFIX:指定分割后的文件的前缀,写在所有选项的最后

  1. awk的内建函数split允许你把一个字符串分隔为单词并存储在数组中。你可以自己定义域分隔符或者使用现在FS(域分隔符)的值
  2. split (string, array)  -->如果第三个参数没有提供,awk就默认使用当前FS值
  3. time="12:34:56"
    out=`echo $time | awk '{split($0,a,":");print a[1],a[2],a[3]}'`
    echo $out

 substr 截取字符串

substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
echo "123" | awk '{print substr($0,1,1)}'

流程控制语句 

在linux awk的while、do-while和for语句中允许使用 break,continue语句来控制流程走向,也允许使用exit这样的 语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序 都可以交给awk,而且性能是非常快的。

条件判断语句

循环语句

​​​​​​​

根据扩展名切割文件名

${VAR%.*}  非贪婪模式  ${VAR%%.*}  贪婪模式

通配符从右向左进行匹配
 例: VAR="hack.fun.book.txt"
         echo ${VAR%.*}     hack.fun.book  非贪婪模式(从右向左截,只截走第一个)
         echo ${VAR%%.*}  hack  贪婪模式(从右向左截,只留下一个)

${VAR#*.}  非贪婪模式  ${VAR##*.}  贪婪模式  

从左到右进行匹配
 例:VAR="hack.fun.book.txt"
        echo ${VAR#*.}   fun.book.txt  非贪婪模式(从左向右截,只截走第一个)
        echo ${VAR##*.}  txt   贪婪模式(从左向右截,只留下一个)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值