简单的正则表达式

来源:互联网 发布:董小飒淘宝店损失 编辑:程序博客网 时间:2024/06/10 18:39
1.grep/egrep工具的使用
     grep【-cinvABC】 'world' filename
          -c:打印符合要求的行数
          -i:表示忽略大小写
          -n:表示输出符合要求的行及其行号
          -v:表示打印不符合要求的行
          -A:后面跟一个数字a,表示打印符合要求的行以及下面的a行
          -B:后面跟一个数字a,表示打印符合要求的行以及上面的a行
          -C:后面跟一个数字a,表示打印符合要求的行以及上下各a行

          在正则表达式中,^表示行的开始,$表示行的结尾,那么空行可以用^$表示【^字符】表示除【】内字符之外的字符;
          ^[^a-zA-B]:代表非字母开头;
          .:任意一个字符
          *:表示零个或多个前面的字符——ooo*:表示 oo、ooo...
          {n1,n2}:表示前面字符重复的词数,{ }要加上脱义字符\---\{n\};其中 n1小于 n2,表示前面的字符重复 n1 到 n2 次(如果能重复大于n2次则也代表 重复了n2次),n2 可以为空,表示大于等于 n1 次
          
          --------------------------------------------------------------------------------------------
     egrep:
          筛选 一个或多个前面的字符:c+,c代表一个字符
          筛选零个或多个前面的字符:c?,c代表一个字符
          筛选字符串1或者字符串2:string1|string2|string3
          ( ):表示一个整体,(00)+就表示 一个oo 或者多个 oo




2.sed工具的使用
      打印某行(-n ... p):sed  -n 'n'p filename:单引号内是一个数字,表示第几行--打印(p)这行,也可以用 '1,$',表示所有行
          过滤筛选:sed -n '/words/'p filename ——把筛选的条件放在  / /之中
           用 -e 参数可以实现多个行为  sed -e '1'p -e '/111/'p  -n filename 

     删除(d)某行或多行:sed  'n'd filename  (实际文件中并没有被删除,只是没有显示出来)
          还可以删除匹配某个字符的行:sed  '/words/'d filename

     替换字符或者字符串:sed '1,2s/ot/to/g' filename
          s就是替换动作,g表示本行全局替换,如果不加g则表示本行出现的第一个,出了用 /作为分隔符还可以用#、@(当内容里本身带有/时,可以用其他字符来作为分隔符)
          也可以作为删除动作,把要删除的内容替换为空

     调换两个字符串的位置:sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1' filename  ---把rot 和 bash调换位置(这两个单词分别为一行的前后)
          小括号--整体,但是需要转义字符

     添加内容:sed 's/^.*$/&aaa、' filename 在末尾添加,如果是aaa&,则是每行前添加     

     直接修改文件内容:sed -i 's/ot/to/g' filename
          最好先备份

如何在一个字符串中确定一个数??
     这个数的前后紧接的字符都不为一个数字
     


  3.awk工具的使用
      awk是流式编辑器,针对文档中的行进行操作,一行一行的执行,awk兼具sed的所有功能
      awk :
           选项-F  'a':后面跟分隔符,如果不加此选项,默认为空格后者tab
          '{print $n}':表示打印某个字段,n为数字,当为0时,代表打印整行,print为打印动作,但要用{ }括起来,print还可以打印自定义内容,但是要用 双引号括起来 {print $1“heh”$2}
         
     匹配字符或字符串 : ‘/words/’
     匹配某个段:awk -F  ':'  '$1 ~/worlds/' filename——~:为匹配,$指示第几个字段
     多次匹配: awk -F ‘;' '/worlds1/ {print $n1}  /worlds2/  {print $n2}' filename  ——先匹配wolds1 打印出结果,再匹配worlds2 ,再打印出结果,虽然最后是一起打印,可是先匹配的打印出来的在下面
     
     条件操作符
          条件要用单引号括起来
          awk中可以用逻辑符号进行判断,数字加上双引号则表示字符
          ==:等于     >     <     >=     <     <=     !=
          还可以用逻辑运算符  &&  ||
          
     内置变量
          NF:为分隔后一共有多少段  {print NF}
          NR:表示行号
          $NF:表示最后一段的值
     NR还可以作为判断条件,还可以配合段匹配一起使用

     awk中的数学运算
          更改段值awk -F ':'  '$1="newvalue"'
          对各个段值进行运算 ,
          计算某个段的总和:
               awk -F ':'  ’{(tot=tot+$n);END {print tot}‘ filename 
               END是awk的语法,表示所有的行都已经执行
          awk中还可以使用 if 、for
     


分隔符后的 单引号内是执行内容 ,可以是筛选条件也可以是设置,如果是筛选条件 符合条件的打印出来,如果需要打印变量或者 相应字段,则需要用大括号加print      
0 0
原创粉丝点击