Linux学习(六)-----正则表达式

5 篇文章 0 订阅
        书上说,正则表达式很重要,但是本人才开始学习,也不知道,到底有什么重要的作用。在这里记录只是为了以后方便查阅。这里介绍的是用于编写shell脚本的正则表达式。
    首先,我们要先认识基础的正则表达式的重要的特殊字符的含义。如下表:
      

 RE字符

含义 

举例

  

^word

^表示行首,待搜索的word字符串在行首

grep -n '^#' test.c

搜索行首为#开始的那一行

 

 word$

$表示行尾,待搜索的字符串word在行尾

grep -n '!$' test.c

搜索行尾为!的那一行 

    

    .

代表一定存在一个的任意字符,即其位置一定仅有一个字符

grep -n 'e.e' test.c

搜索的字符串{eve}{eae}{e e}等

    

    \

转义符,将特殊符号的特殊意义去掉

grep -n \' test.c

搜索含有单引号的那一行

    

    *

*位置前面的一个字符重复零次或者零次以上

grep -n ‘ess*’test.c

搜索含有{es}{ess}{esss}等字符串

 

\{n,m\}

连续重复n到m个前一个字符

若为\{n\}则是连续重复n个前一个字符

若为\{n,\}则是连续重复n个以上的前一个字符

grep -n ‘go\{2,3\}g’ test.c

在g和g之间有2~3个o存在的字符串,即{goog}{gooog}

    

 

  [ ]

[]里放的字符表示存在其中任何一个即可

1、[list]

grep -n ‘g[ld]’ test.c

搜索含有{gl}或{gd}的那一行

2、[ch1-ch2]

grep -n '[0-9]' test.c

搜索含有任意数字的行

grep -n '[^0-9]' test.c

搜索不含数字的行

   接下我们介绍几个工具程序,分别是grep,printf,sed,awk……
 
 
1、grep  
   

用法:grep [参数]   '搜索字符串'    [filename]

参数

      -a   将二进制文件以文本文件的方式搜索数据

      -c   计算找到‘搜索字符串’的次数

      -i   忽略大小写的不同

      -n   顺便输出行号

      -v   选出不含‘搜索字符串’的行

举例

 

[root@Ca03 ~]# last | grep -v 'root'

reboot   system boot  2.6.18-164.11.1. Mon Feb 20 17:02         (9+04:16)  
reboot   system boot  2.6.18-164.11.1. Mon Feb  6 09:26         (23+11:53) 
reboot   system boot  2.6.18-164.11.1. Thu Jan  5 11:39         (14+05:07) 
reboot   system boot  2.6.18-164.11.1. Mon Dec 12 10:54         (3+22:10)  
reboot   system boot  2.6.27           Tue Dec  6 16:15         (5+18:35)  

 

2、printf
 
用法:  printf   ‘打印格式’实际内容
 
参数
            \a  警告声音输出
            \b  退格键
            \f   清除屏幕
            \n  输出新的一行
            \r   即Enter键
            \t   水平的tab键
            \v  垂直的tab键
            \xNN   NN为两位数的数字,可以将数字转换为字符
            %ns   即n个字符
            %ni    即n个整数
            %N.nf  N位,小数点后有n位
举例: 

图片

 [root@linux ~] # printf  '\x45\n'

E

 

3、sed
 
用法:sed [参数]  [动作]
 
参数
          -n   经过sed特殊处理的那一行会显示在屏幕上
          -e   直接在命令行模式上进行sed的操作编辑
          -f    直接将sed的操作写在一个文件内,-f filename ,则可执行filename的sed操作
          -r    支持扩展正则表达式
          [n1[,n2]]  function
          不一定存在,代表选择进行操作的行数。
function: 
          a    新增。a后面接的字符串会在当前的下一行出现
          c    替换。c后面接的字符串可以替换n1,n2之间的行
          d    删除。d后面通常不接内容
          i     插入。i后面接的字符串会在当前的上一行出现
          p    打印。
          s    搜索。
举例
nl /etc/passwd | sed '2,5d'   删除第2~5行。
nl /etc/passwd | sed '2a drink tea?'  在第二行之后加上“drink tea?”
nl /etc/passwd | sed -n '5,7p'  打印5~7行
 
 
4、awk
 
用法:awk '条件类型1{动作1}条件类型2{动作2}……'  filename
             注意:{动作}可以是几个动作,每个动作之间以;隔开或者以换行区分
参数
       awk的内置变量:NF(每一行$0拥有的字段总数)
                                  NR(当前awk所处理的是第几行数据)
                                  FS(当前的分隔符)
      条件用到的逻辑运算符  >    <    >=   <=      ==    !=
举例
cat pay.txt |   awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2 {total = $2+$3+$4 ;printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值