Linux 之正则表达式

正则表达式是通过一些特殊符号的辅助,让用户轻易的达到查找、删除、替换某些特定字符串的处理程序。
正则表达式:分为基础正则表达式 和扩展正则表达式。

基础正则表达式:
     1     语系对正则表达式的影响,建议使用下面特殊符号。
          [:alnum:]     代表英文字母和数字
          [:alpha:]     英文字母
          [:blank:]     空格键和Tab键
          [:cntrl:]     代表控制按键
          [:digit:]     代表数字
          [:graph:]     代表处空格(空格和tab)外的其他按键
          [:lower:]     代表小写字母
          [:print:]     代表任何可以被打印的字符
          [:punct:]     代表标点符号(punctuation symbol)
          [:upper:]     代表大写字母
          [:space:]     任何产生空白的字符 tab CR
          [:xdigit:]     十六进制的整数类型0-9 a-f  A-F
     
     2     grep的高级参数
          grep [-A] [-B] [--color=auto] '搜索字符串' filename
               -A:后面接数字,为after的意思,除该行外,后续n行也列出
               -B:后面接数字,为before的意思,除该行外,前面n行也列出来
          
          例:dmesg | grep 'eth'     #用dmesg列出内核信息,再用grep找出eth相关的行
               dmesg | grep -n --color=auto 'eth'       #-n显示行号
               dmesg | grep -n -A3 -B3 'eth'               #显示eth行以及前三行后三行
          grep在数据查找一个字符串是以整行为单位进行数据选取的。

     3     正则表达式练习
          查找特定字符串
               grep -n 'the' filename     #在filename中查找the
               grep -vn 'the' filename     #在filename中查找不含the的行
               grep -in 'the' filename     #在filename中查找含the的行,不区分大小写
          利用[]查找集合字符
               grep -n 't[ae]st' filename     #查找含有tast 或test的行
               grep -n '[^g]oo' filename     #查找不要oo前面有g的行
               grep -n '[^a-z]oo' filename     #查找oo前不要有小写字母的行
               grep -n '[0-9]' filename     #查找有数字的行
               grep -n '[^[:lower:]]oo' filename     #查找oo前非小写字母的行
               grep -n '[[:digit:]]' filename     #查找数字的行
          行首与行尾字符 ^ $
               grep -n '^the' filename     #查找行首有the的行
               grep -n '^[a-z]' filename     #查找行首以小写字母的行
               grep -n '^[[:lower:]]' filename     #同上
               grep -n '^[^[:alpha:]]' filaname     #查找行首非字母的行
               grep -n '\.$' filename      #查找行尾以.结束的行。
               grep -n '^$' filename     #查找空行
               grep -n '^#' filename         #查找#开头的行
          任意一个字符.与重复字符*
               .:代表任意一个字符
               *:代表重复前一个0或无穷多个字符
               grep -n 'g..d' filename
               grep -n 'ooo*' filename      #o*代表空字符或者1个o以上的字符
               grep -n 'g.*g' filename     #代表gg之间有0个或者多个任意字符
          限定连续RE字符范围{}
               grep -n 'o\{2\}' filename     #必须用转移字符\让{失去shell中的特殊意义
               grep -n 'o\{2,5\}'      filename     #查找出有2-5个o的字符
               grep -n 'o\{2,\}'     filename     #查找出2到无穷多个字符
     4     基础正则表达式
          ^word     查找开头为word的行
          word$     查找word在行尾
          .          指代一定有一个任意字符
          \          转义字符
          *          重复0个或多个前一个字符
          [list]     从字符集合list中找出要选取的字符
          [n1-n2]
          [^list]
          \{n,m\}     连续n到m个前一个RE字符

     5     sed工具
          sed用来将数据替换、删除、新增、选取特定行功能
          sed [-nefr] [动作]
               -n:使用安静模式silent。 一般sed用法中,所有stdin的数据都会显示在屏幕中,-n后只有经过sed处理的行才显示。
               -e:直接在命令行模式进行sed动作编辑
               -f:直接将sed动作卸载一个文件中,-f filename执行sed动作。
               -r:sed动作支持扩展的正则表达式
               -i:直接修改读取的文件内容,而不是由屏幕输出。
          动作说明:[n1[,n2]] function
                c:替换,c后接字符串,替换n1-n2之间的行
               d:删除,
               i:     插入,i后接字符串,在下当前行上一行出现
               p:打印,
               s: 替换,如:1,20s/old/new/g

          nl /etc/passwd |sed '2,5d'     #删除2-5行
          nl /etc/passwd |sed '2a drink tea'     #在2行增加一行
          nl /etc/passwd |sed '2a drink tea.....\     #在2行增加多行 \是必须要的
                    >dreann bea'
          nl /etc/passwd |sed '2,5d no 2-5 number' #替换2-5行数据
          nl /etc/passwd |sed -n '5,7p'

     6      扩展正则表达式
               egrep 或者 grep -E命令     
                    egrep -v '^$|^#' filename     #or的关系
                    egrep -n 'go+d' filename     # +重复一个及以上前一个RE字符
                    egrep -n 'go?d' filename     #0个或一个前一个RE字符
                    egrep -n 'g(la|oo)d' filename     #
                    egrep -n 'A(xyz)+C' filename     #()+重复一个以上xyz的字符串
               
                    egrep -n '[!>]' filename #查找含!>的字符   注:!非特殊字符

     7     格式打印 printf
     8     awk:好用的数据处理工具,
          awk倾向于把一行数据分成多个字段来处理
               awk '条件类型{动作1} 条件类型{动作2}...' filename
     9文件比较工具diff、cmp、patch
     10     文件打印准备pr


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值