码迷,mamicode.com
首页 > 系统相关 > 详细

linux-正则表达式-awk-sed使用方法

时间:2015-08-18 10:11:46      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

•     正则表达式
•     sed
•     awk


正则表达式
    使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。
1.特点:
     (1)灵活性、逻辑性和功能性非常的强;
     (2)可以迅速地用极简单的方式达到字符串的复杂控制。
     (3)对于刚接触的人来说,比较难懂
2.应用对象:文本
3.匹配模式
    次数匹配:
        . 匹配任意单个字符
        *:匹配其前面字符任意次  (>=0)
        \?:匹配其前面的字符1次或0
        \{m,n\}:匹配其前面的字符至少m次,至多n次 (n>m)
            可以没有上限,但必须有下限
    位置匹配:
        ^:行首,此字符后面的任意内容必须出现在行首
        $:行尾,此字符前面的任意内容必须出现在行尾
        ^$:空白行
        \<:其后面的任意字符必须作为单词首部出现
        \>:其前面的任意字符必须作为单词尾部出
        \<\>:精确匹配
            \<root\>:查找root单词
     分组:后向引用
        \(love\).*\1:引用第一个左括号,以及与之对应的右括号所包括的内容

正则表达式分两类:
1.基本正则表达式
2.扩展正则表达式

使用grep
    -v 不匹配
    -n 显示行号
     -A     N:显示找到的结果,并显示后N行
     -B     N:显示找到的结果,并显示前N行
     -C     N:显示找到的结果,并显示前后N行
    -E 使用扩展正则表达式  grep  -E  =  egrep

扩展正则表达式:
字符匹配:跟基本正则表达式是一样的

不显示以#开头或;开头的行
[root@pagoda63 ~]# egrep -v "^#|^;" /etc/samba/smb.conf

次数匹配:
*:匹配其前面字符任意次  (>=0)
?:不需要加\   匹配其前面的字符1次或0次
+:匹配其前字符至少一次,类似于\{1,\}   ?和+的组合相当于*
[root@station2 test]# grep -E ‘^[[:space:]]+‘ /etc/grub.conf
{m,n}:不需要加\

位置匹配:跟基本正则表达式是一样



===========================================================
sed
strem editor  流编辑器
sed 是一种在线编辑器,它一次处理一行内容。处理时,
把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),
接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,
除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作

语法:
sed  [options]  ‘[command]’  [filename]
options:
        -n     抑制自动(默认的) 输出 ***  读取下一个输入行
        -e     执行多个sed指令
        -f     运行脚本
        -i     编辑文件内容 ***
        -i.bak     编辑的同时创造.bak的备份
        -r     使用扩展的正则表达式 ***
command:
        a     在匹配后追加 ***
        i     在匹配后插入 ***
        p     打印 ***
        d     删除 ***
        r/R     读取文件/一行
        w     另存
        s     查找
        c     替换
        y     替换
        h/H     复制拷贝/追加模式空间(缓冲区)到存放空间
        g/G     粘贴 从存放空间取回/追加到模式空间
        x     两个空间内容的交换
        n/N     拷贝/追加下一行内容到当前
        D     删除\n之前的内容
        P     打印\n之前的内容
        b     无条件跳转
        t     满足匹配后的跳转
        T     不满足匹配时跳转   

实例:
    1:显示/etc/passwd第三行
        [root@pagoda63 ~]# sed -n ‘3p‘ /etc/passwd
        daemon:x:2:2:daemon:/sbin:/sbin/nologin
    2:显示文件前三行
        [root@pagoda63 ~]# sed -n ‘1,3p‘ /etc/passwd
        root:x:0:0:root:/root:/bin/bash
        bin:x:1:1:bin:/bin:/sbin/nologin
        daemon:x:2:2:daemon:/sbin:/sbin/nologin
    3:显示文件除前三行之外的全部内容
        [root@pagoda63 ~]# sed -n ‘1,3!p‘ /etc/passwd
    4:在文件头加入###
        [pagoda@mylab ~]$ sed ‘1i###‘ /etc/passwd >a.txt
    5: 在文件尾加入@@@
        [pagoda@mylab ~]$ sed ‘$a@@@‘ /etc/passwd >b.txt
    6:把文件第三行替换成“$$$
         [pagoda@mylab ~]$ sed ‘3c$$$‘ /etc/passwd >c.txt
         [pagoda@mylab ~]$ head -4 c.txt
    7:把文件的第二行到第四行复制到文件的末尾
        [pagoda@mylab ~]$ sed ‘2,4H;$G‘ /etc/passwd > d.txt

sed中的正则:
    1:删除文件中空行
        [pagoda@mylab ~]$ sed ‘/^$/d‘ /etc/passwd >e.txt
    2:把fstab中包含ext4的记录(行)写入新的文件中
        [pagoda@mylab ~]$ sed ‘/ext4/w newfstab‘ /etc/fstab

======================================================================
awk
AWK 是一种用于处理文本的编程语言工具
任何awk语句都是由模式和动作组成,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。

特殊字段:
BEGIN语句设置计数和打印头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。

分隔符默认是空格,可以用-F, 改变成逗号为分隔符 -F,  或改成冒号 -F:


实例:
    1.自定义年月日的显示方式:
        [pagoda@mylab ~]$ date | awk ‘{print "Year:"$6 "\t month:"$2 "\t days:"$3}‘
    2:显示所有内容:
        [pagoda@mylab ~]$ awk ‘{print $0}‘ /etc/passwd
    3:显示第一列和第三列的内容
        [pagoda@mylab ~]$ awk -F: ‘{print $1,$3}‘ /etc/passwd
    4:打印一个文件头,打印一个文件尾
    特殊字段:
    BEGIN语句设置计数和打印头部信息,在任何动作之前进行。
    END语句输出统计结果,在完成动作之后执行。
    [pagoda@mylab ~]$ awk -F: ‘BEGIN {print "name uid bash\n"}{print $1,$3,$7} END{print"End of class passwd"}‘ /etc/passwd
   
    5:第3列等于0的那些记录
    [pagoda@mylab ~]$ awk -F: ‘{if($3=="0")print $0}‘ /etc/passwd
    root:x:0:0:root:/root:/bin/bash

    6:第3列大于等于100的那些记录
[pagoda@mylab ~]$ awk -F: ‘$3>=100 {print $0}‘ /etc/passwd
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
pagoda:x:500:500::/home/pagoda:/bin/bash
   
   
       
       
        
           

linux-正则表达式-awk-sed使用方法

标签:

原文地址:http://www.cnblogs.com/ylion/p/4738538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!