zoukankan      html  css  js  c++  java
  • Linux sed和awk

    sed

    strem editor  流编辑器

    sed  编辑器是一行一行的处理文件内容的。正在处理的内容存放在模式空间(缓冲区)内,处理完成后按照选项的规定进行输出或文件的修改。

    sed主要用来自动编辑一个或多个文件;简化文件的反复操作;非交互式编译文件

    语法:

    sed 【options】  ‘【command】’ 【filename】

    options:

    -n  抑制自动(默认的)输出  读取下一个输入行,-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  删除 之前的内容

    P  打印 之前的内容

    b  无条件跳转

    t  满足匹配后的跳转

    T  不满足匹配时跳转

    显示文件第三行的内容

    [root@zq ~]# sed -n 3p /etc/passwd    对第三行进行操作 p打印出
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@zq ~]# sed -n '1,3p' /etc/passwd   显示1-3行的内容
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@zq ~]# sed -n '1,3!p' /etc/passwd    加感叹号就是除了1-3显示其他所有内容
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
    systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:997:995:User for polkitd:/:/sbin/nologin

    显示第三行和之后的三行

    [root@zq ~]# sed -n '3,+3p' /etc/passwd
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync

    在文件的头插入“###”,在文件尾插入“@@@”,把文件第三行替换成“$$$”

    [root@zq ~]# sed '1i###' /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/nologi   这个改完之后是不保存的 ,原文件还是老样子
    [root@zq ~]# sed '1i###' /etc/passwd > a.txt   重定向
    [root@zq ~]# sed '1i###' /etc/passwd >> a.txt   追加
    [root@zq ~]# head a.txt 
    ###
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@zq ~]# sed '$a@@@' /etc/passwd >> a.txt  在文件尾部追加@@@   $代表尾部a代表追加
    [root@zq ~]# tail a.txt 
    gdm:x:42:42::/var/lib/gdm:/sbin/nologin
    gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
    avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    zq:x:1000:1000:zq:/home/zq:/bin/bash
    apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    @@@
    [root@zq ~]# sed '3c$$$' /etc/passwd   第三行插入$$$
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    $$$

    awk

    AWK是一种优良的文本处理工具,linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言的最大功能取决于一个人所拥有的知识。awk命名:Alfred Aho Peter Weinberger和brian kemighan三个人的姓的缩写。

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

    特殊字段:

    BEGIN语句设置计数和打印头部信息,在任何动作之前进行。

    END语句输出统计结果,在完成动作之后执行。

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

    eg:准备要显示的内容

    vim result.txt

    aa 7 17 27 37 47 57
    bb 8 18 28 38 48 58
    cc 9 19 29 39 49 59
    dd 6 16 26 36 46 56
    [root@zq ~]# awk "{print $0}" result.txt     双引号怎么不行,大神如果看到请给一下意见
    
    
    
    
    [root@zq ~]# awk '{print $0}' result.txt     $0显示所有内容 
    aa 7 17 27 37 47 57
    bb 8 18 28 38 48 58
    cc 9 19 29 39 49 59
    dd 6 16 26 36 46 56
    [root@zq ~]# awk '{print $1}' result.txt     $1显示内容的第一列
    aa
    bb
    cc
    dd

    显示/etc/passwd第一列,以:作为分隔符

    [root@zq ~]# awk -F: '{print $1}' /etc/passwd
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    operator

    显示第一列和第三列内容

    [root@zq ~]# awk '{print $1,$3}' result.txt 
    aa 17
    bb 18
    cc 19
    dd 16                    有点儿python取列表字典里面元素的意思
    [root@zq ~]# awk 'BEGIN {print "name level result
    "} {print $1,$2,$3} END{ print "end of class1 results"}' result.txt 
    name level result
    
    aa 7 17
    bb 8 18
    cc 9 19
    dd 6 16
    end of class1 results    这更有点儿python嵌套的意思了,也不是给取的值 取个名字,也不是嵌套就是给要取的值赋了个名字
    [root@zq ~]# awk '$2 >= 7 {print $0}' result.txt   快跟sql python 连上了
    aa 7 17 27 37 47 57
    bb 8 18 28 38 48 58
    cc 9 19 29 39 49 59
    [root@zq ~]# awk '{ if($1 == "aa" || $2=="8") print $0 }' result.txt 
    aa 7 17 27 37 47 57
    bb 8 18 28 38 48 58   无处不在的if  或   
  • 相关阅读:
    程序自动更新版本
    [.NET] Rough Dependency Injection
    Python标准库存储对象(pickle包,cPickle包)
    发送邮件,支持群发
    css3传送带示例
    “计算机之子”的MVVM框架源码学习笔记
    Windows 8 应用商店正式面向全部开发者开放
    MVVM框架 v1发布
    Python学习索引
    注册 windows 8 开发者账号
  • 原文地址:https://www.cnblogs.com/zq6041/p/6832198.html
Copyright © 2011-2022 走看看