zoukankan      html  css  js  c++  java
  • shell脚本 sed工具

    sed工具概述(流式编辑器)
    非交互,基于模式匹配过滤及修改文本
    逐行处理,并将结果输出到屏幕
    可实现对文本的输出,增,删,改,查等各种操作

    sed流控制:
    !:取反操作,根据定址条件取反
    n:读下一行,产生隔行,跳行的效果

    命令格式解析:
    格式一:sed [选项] '编辑指令' 文件
    格式二:前置命令|sed [选项] '编辑指令'
    常见命令选项:
    -n:屏蔽默认输出
    -i:直接修改文件内容
    -f:使用sed脚本
    -e:可指定多个处理动作
    -r:启用扩展的正则表达式,若与其他选项一起使用,应作为首选项
    -{}:可组合多个命令,以分号分隔

    编辑指令指定址符
    定址符,即 [地址1],[地址2]
    用来指定处理的起,止行数
    省略定制符,默认逐行处理全部文本
    地址可表示为文本的 "行号" 或者用来匹配的 "/正则表达式/"

    sed的基本处理
    ____________________________________________________________________________________+
    |
    操作符 用途 指令示例 |
    p 打印行 2,4 输出第2,3,4行 2p;4p输出第2行,4行 |
    d 删除行 2,4d 删除第2,3,4行 |
    s 字符串替换 s/old/new 将每行的第一个old替换为new, |
    s/old/new/3 将每行的第三个old替换为new, |
    s/old/new/g 将所有old替换为new |
    ____________________________________________________________________________________+
    替换操作的分隔/ 可改用其他字符 如# &等,便于修改文件路劲

    sed的文本处理
    ——————————————————————————————————————————
    操作符 用途 指令示例
    i 行前插入文本 2iyy 在第二行之前添加文本行 yy
    4,7iyy 在第4-7行的每一行前添加文本行
    a 行后插入文本 2ayy 在第2行后添加文本
    /^xx/ayy 在以xx开头的行之后添加文本
    c 替换当前行 2cyy 将第2行的内容修改为yy
    ——————————————————————————————————————————

    使用sed脚本
    复杂操作可存为脚本,通过-f调用
    格式:sed -f 操作脚本 文件
    [root@ceshiji ~]# vim /root/test.sed
    s/pang/&jing/
    s/[0-9]//g
    [root@ceshiji ~]# sed -f /root/test.sed a.txt


    示例:
    [root@ceshiji ~]# sed '/IPADDR/c IPADDR=192.168.4.40' /etc/sysconfig/network-scripts/ifcfg-eth0(修改ip)

    [root@ceshiji ~]# sed '2i xxx' a.txt (增加)
    1
    xxx
    2
    3

    [root@ceshiji ~]# sed '1,3d' a.txt (删除1行3行)
    4
    5
    6

    [root@ceshiji ~]# sed 's/4/xx/1' a.txt (替换)
    1
    2
    3
    xx
    5
    6
    [root@ceshiji ~]# sed -r 's/(....)....(...)/1***2' a.txt


    文件导入导出
    基本动作:
    -r:动作应结合-i选项才会存入,否则只输出
    -w:动作以覆盖的方式另存为新文件

    示例
    [root@ceshiji ~]# sed '3r b.txt' a.txt 在第三行下方插入文件b.txt
    [root@ceshiji ~]# sed '4,7r b.txt' a.txt 在第4-7每行后插入文件b.txt
    [root@ceshiji ~]# sed '3w c.txt' a.txt将第三行另存为c.txt


    sed复制剪切
    模式空间
    存放当前处理的行,将处理结果输出
    若当前行不符合处理条件,则原样输出
    处理完当前行再读入下一行来处理

    保持空间
    作用类似于剪切板
    默认存放一个空行(换行符 )

    基本动作:
    -H;模式空间——[追加]——》保持空间
    -h;模式空间——[覆盖]——》保持空间
    H,h———复制
    -G:保持空间——[追加]——》模式空间
    -g:保持空间——[覆盖]——》模式空间
    G,g——粘贴


    综合实例:
    根据/etc/passwd提取密码串
    找到使用bash作登陆shell的本地用户
    列出这些用户的shadow密码记录
    按每行 用户名——》密码记录 保存结果
    #!/bin/bash
    user=`sed -n '/bash$/s/:.*//p' /etc/passwd`
    for i in $user
    do
    pass=`grep "$i" /etc/shadow`
    pass=${pass#*:}
    pass=${pass%%:*}
    echo "$ipass$pass"
    done

    ————————————————————————————————————————————————————————

  • 相关阅读:
    postgres 流复制集群配置(一)
    postgres 文件系统级别的备份 pg_dump
    postgres 基于基础备份的恢复操作 (二)
    postgres 基于基础备份的恢复操作 之恢复文件详解recover.conf(一)
    postgres 基础备份-->pg_basebackup (二)
    postgres 基础备份-->pg_start_ backup与pg_stop_ backup (一)
    postgres WAL归档
    postgres 并行扫描--索引的正确打开方式
    Python标准库
    awesome python 中文版 相见恨晚!
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/7284801.html
Copyright © 2011-2022 走看看