Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1675303
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-12-14 09:17:40

基础正则表达式

^word   :
                    意义:待查找的字符串(word)在行首
                    范例:查找行首为#的那一行,并列出行号
                    $grep -n '^#'  filename

word$   :
                    意义:待查找的字符串(word)在行末
                    范例:查找行首为!的那一行,并列出行号
                    $grep -n '!$'  filename

.             :
                    意义:代表一定有一个任意字符的字符
                    范例:查找的字符可以是(eve)(eae)(eee)(ee),但不能仅有(ee)!即e与e之间一定仅有一个字符,有空格符也是字符。
                    $grep -n 'e.e‘  filename

\            :
                    意义:转义字符,将特殊符号的特殊意义去掉
                    范例:查找含有单引号的那一行
                    $grep -n \'  filename

*            :
                    意义:重复零个到无穷多个的前一个字符
                    范例:找出含有(es)(ess)(esss)等的字符串,注意,因为*可以是0个,所以(es)也是符合待查找字符串。另外,因为*为重复“前一个RE字符”的符号,因此,在*之前必须紧接着一个RE字符。例如任意字符为“.*”
                    $grep -n 'ess*'  filename

[n1-n2]      :
                    意义:从字符集合的RE字符里面找出想要选取的字符
                    范例:查找含有任意数字的一行,需特别注意,在字符集合[]中的减号“-”是有特殊意义的。它代表两个字符间的所有连续字符。但这个连续字符和ASC||有关,因此,你的编码需要设置正确(在bash中,需要确定LANG和LANGGUAGE的变量是否正确)例如所有大写字母为[A-Z]
                    $grep -n '[0-9]‘  filename

[list]       :                   
                    意义:从字符集合的RE字符里面找出想要选取的字符
                    范例:超找含有(gl)或(gd)的那一行,注意!在[]当中代表一个待查找的字符,例如“a[afl]y”代表查找的字符串可以是aay,afy, aly即[afl]代表a或f或l的意思。
                    $grep -n 'g[ld]‘  filename

[n1-n2]  :
                    意义:从字符集合的RE字符里面找出想要选取的字符范围  
                    范例:查找含有任意数字的那一行
                    root# grep -n  '[0-9]' regular_expression.txt
                    在字符集合[]中“-”是有特殊意义的,代表两个字符之间的所有连续字符,但这个连续与否与ASC编码有关,编码需要设置正确(在bash中,需要确定LANG与LANGUAGE的变量是否正确)例如所有大写英文字符[A-Z]

[^list]   :
                   意义:从字符集合的RE字符里面找出不要的字符串或范围
                   从regular_exp.txt 中找出含‘oo’但不能含有‘oot’的数据
                   root#grep -n 'oo[^t]' regular_exp.txt
                  
\{n, m\}
                    意义:连续n到m个的前一个RE字符,\{n\}表示连续n个的前一个的RE字符,\{n,\}表示连续n个以上的前一个RE字符
                范例:在g与g之间有2个到3个的o存在的字符串
                root# grep -n 'go\{2,3\}g' regular_exp.txt

sed 工具

     root# sed [-nefr] 'n1,n2 function'
     -n:使用安静模式(silent), 默认情况下,所有来自stdin的数据一般都会被列出在屏幕上,
             加上-n参数后,只有经过sed特殊处理的那一行(或者操作)才会被列出来

     -e:直接在命令模式上进行sed的动作编辑;
 
     -f:直接将sed的动作写在一个文件内

     -r:sed的动作支持扩展正则表达式(默认支持基础正则表达式)

    -i:直接修改读取的文件内容,而不是由屏幕输出

   'n1,n2 function':
     n1, n2 可选,一般表示选择进行动作的行数

  function:
            a:新增, a的后面可以接字符串string, string会在新的一行出现(当前行的下一行)

            c:替换,c的后面可接字符串string,string可以替换n1,n2之间的行

            d:删除,

             i:插入,后可接字符串string,string出现在新的一行里(当前行的上一行)

             p:打印,将选择的数据打印出来

             s:替换,可以搭配正则表达式 s/old_string/new_string/g

扩展正则表达式

   +
            意义:重复一个或一个以上的RE字符
            范例:查找(god)(good)(goood)等的字符串
            root#egrep -n 'go+d' regular_exp.txt
 
   ?
           意义:零个或一个的前一个RE字符
           范例:查找(gd)(god)这两个字符串
           root#egrep -n ‘go?d’ regular_exp.txt

   |        
           意义:用或(or)的方式找出数个字符串
           范例:查找gd或good这两个字符串
           root#: egrep  -n 'gd|good' regular_exp.txt

   ()
           意义:查找”组“字符串
           范例:查找(glad)或(good)
           root#egrep -n 'g(la|oo)d' regular_exp.txt
  
   ()+
            意义:多个重复组的判别
            范例:查找‘AxyzxyzxyzxyzxyzC'
            root#egrep -n 'A(xyz)+C'

格式化打印 printf
   
     root#printf '打印格式' 实际内容
    
%ns n是数字, s代表string, 即多少个字符
%ni  n是数字, i代表integer, 即多少个整数字符
%N.nf f代表floating,假设我共要10个位数,小数点后有两位。即为%10.2f

awk

      root#awk '条件类型1{动作1} 条件类型2{动作2}.......' filename

      awk读入一行数据后,$0代表一整行数据,$1代表第一列,$2代表第二列......

      NF:每一行($0)拥有的字段总数

      NR:目前awk所处理的的”第几行“数据

      FS:目前的分割字符,默认是空格键

逻辑运算符:

      >             大于

      <              小于

       >=           大于等于

       <=           小于等于

       ==           等于

       !=           不等于

预先设置awk的变量,使用BEGIN(这样新设置过的变量在第一行就起作用)
     root#awk 'BEGIN {FS=":"}'
所有awk的动作(在{}中的动作),可以利用分号“;”间隔,或者直接以[enter]按键来分割

在awk当中,变量可以直接使用,不用加上$符号

文件比较工具
  
    root#diff [-bBi] from-file to-file
    from-file:欲比较文件名
  
    to-file: 目的比较文件的文件名

    -b:忽略一行当中多个空白的区别

    -B:忽略空白行的区别

    -i:忽略大小写的区别

diff以行为单位进行比较,cmp命令以字节单位进行比较

    root# cmp [-s] file1 file2

    -s: 将所有不同点的字节处都列出来。(cmp默认只输出第一个)


     


阅读(308) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~