Linux学习笔记五 —— 正则表达式

10 篇文章 0 订阅

1.为何正则表达式

       正则表达式是通过一些特殊字符来达到【查找、删除、替换】一行或多行字符串的目的。

 

2.正则表达式用途

        用于处理大量字符串信息的地方。比如邮件服务器

 

3.语系对正则表达式的影响

        zh_CN.big5和C语系中,英文大小写编码顺序为:

        LANG = C:0 1 2 3 ... A B C D ... Z a b c d ... z

        LANG = zh_CN.big5:0 1 2 3 ... a A b B c C ... z Z

        如果想选取大写字符而使用【A-Z】时,会发现LANG = C语系确实仅识别大写字符。但是big5语系会把小写b-z也同时选取出来。所以,使用正则表达式时,需要特别注意环境的语系。在兼容POSIX标准中,就使用C这个语系

        为了避免语系对大小写和数字的选取问题,可以采用一些特殊符号:

特殊符号代表意义
[:alnum:]代表英文大小写及数字
[:alpha:]代表英文大小写
[:blank:]代表空格键和TAB按键
[:digit:]代表数字
[:lower:]代表英文小写
[:upper:]代表英文大写
[:punct:]代表标点符号

 

4.基础正则表达式练习

          1)查找文件中包含某个字符串的行

          grep  [-n]   [-An1]  [-Bn2]    '需要查找的字符或字符串'   filename

          参数-n:结果中显示行号;

          参数-An1:除了列出关键行外,后面n1行也同时列出;

          参数-Bn2:除了列出关键行外,前面n2行也同时列出;

          2)查找不含某个字符串的行

          grep  -vn    '不需要查找的字符或字符串'   filename

          3)查找不区分大小写字符串的行

          grep  -in    '需要查找的字符或字符串'   filename    

          4)查找集合字符(比如test和taste)      

          grep  -n    't[ea]st'   filename    

           5)查找集合字符中不带某字符(比如oo前不带g)  

           grep  -n    '[^g]oo'   filename   

           该命令可以不选取good字符,但仍然会选取goooooooooooood字符。

           6)查找集合字符中不带小写字符

            grep  -n    '[^a-z]oo'   filename   

           或   grep  -n    '[^abcdefghijklmnopqrstuvwxyz]oo'   filename

           或   grep  -n    '[^[:lower:]]oo'   filename   

           7)查找仅在行首出现的字符

           grep  -n    '^需要查找的字符串'   filename  

           8)查找行首是小写字符

           grep  -n    '^[a-z]'   filename  

           或   grep  -n    '^[[:lower:]]'   filename   

           8)查找行首不是英文字符

           grep  -n    '^[^[:alpha:]]'   filename

           9)查找仅在行尾出现的字符

           grep  -n    '需要查找的字符串$'   filename

           10)查找仅在行尾出现的特殊字符(比如.或!)

           grep  -n    '\需要查找的字符串$'   filename (反斜杠后接特殊字符)

           11)查找空白行

           grep  -n    '^$'   filename

           12)查找某个特定单词(比如g和d之间必定存在两个未知字符)

           grep  -n    'g..d'   filename

           13)查找某个特定单词(比如含有o、oo、ooo、oooo...的单词)

            grep  -n    'oo*'   filename

           14)查找某个特定单词(比如不含o、含有o、oo、ooo、oooo...的单词)

            grep  -n    'o*'   filename

            15)查找特定单词(比如g开头,g结尾,中间可有可无字符)

             grep  -n  'g.*g'  filename

             这个命令跟 grep  -n  'go*g'  filename不同

             16)查找含有2个o的字符

             grep   -n  'o\{2\}'  filename   (反斜杠后接特殊字符)

             17)查找gg之间含有2到5个o的字符

             grep  -n  'go\{2,5\}g'   filename

             18)查找gg之间含有2个以上o的字符

             grep  -n  'go\{2,\}g'   filename

 

5.sed工具

       sed是流编辑器,擅长对数据处理。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。利用sed命令可以将数据行进行替换、删除、新增、选取等特定工作。

        用法:sed   [-nefri]    '操作'

        参数说明:

        -n:使用安静模式。默认情况下,所有来自STDIN的数据都会被列到屏幕上。但加上-n后,只有经过sed处理的那一行才会被列出。

        -e:直接在命令行模式进行sed编辑。

        -f:直接将sed操作写入一个文件。-f  filename。

        -r:使用扩展型正则表达式语法。

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

        操作说明:[n1, [n2]]  function

        n1,n2表示操作的行数

        a:新增。a后面可以接字符。字符会出现在新一行(目前的下一行)

        c:替换。c后面可以接字符。字符替换n1和n2之间的行

        d:删除。

         i:插入。i后面可以接字符。字符会出现在新一行(目前的上一行)

        s:替换。这个s操作可以搭配正则表达式(比如1,20s/old/new/g)

        p:打印。通常和-n参数一起使用。

 

6.awk工具

        相较于sed作用于一整行处理,awk倾向于一行中分成数个字段来处理。因此,awk适合处理小型文本数据。

        用法:  awk  '条件类型1{操作1}  条件类型2{操作2}  ...'  filename

 

7.文本对比工具

        diff   [-bBi]   from-file    to-file

        from-file:作为原始对比文件;

        to-file:作为目标对比文件

        参数:
        -b:忽略一行中多个空格键的差异; 

        -B:忽略空白行的差异;

        -i:忽略大小写不同的差异。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值