• sed命令入门


    什么是sed

    sed是一种流处理编辑器,可以分割、查找、替换文本。
    sed命令的处理流程:行处理

    Created with Raphaël 2.1.0在shell中执行sed文本或管道输入读入到模式空间处理模式空间中的文本文件是否结束输出结果yesno

    sed命令的格式

    sed [options] ‘command’ file
    options(选项): -e (使用多个sed命令) ; -n(只输出经过sed选定的行); -i(将处理结果输出到文件);
    command(命令): 行定位(正则规则) +sed命令(操作)

    sed操作命令

    • p 打印
      sed -n ‘1p’ 打印第1行
    • a 追加一行
      例子:sed ‘5a ——————’在第5行后添加分隔线
      如果a命令后面跟的是空格需要转义
      sed ‘5a ‘在第5行后面添加空格
    • i 插入行
      例子:sed ‘5a ——————’在第5行前插入分隔线
    • c 替换行
      例子:sed ‘5c ——————-’ 将第5行替换为分隔线
    • d 删除行
      sed ‘5d’ 将第5行删除
      sed ‘^$d’ 删除空行

    • s 替换命令
      分隔符/,#,用来将命令和正则表达式分开
      例子:
      sed ‘s:\%’ 将行里面第一次匹配的:替换为%
      sed ‘s:\%g’ 加g后表示全局替换,会替换每一个匹配的模式

    sed行定位

    1. 指定行号 sed ‘x’ 或sed ‘x,y’
      例子:
      sed -n ‘2p’ /etc/passwd 打印passwd中第2行
      sed -n ‘3,4p’ /etc/passwd 打印passwd第3到4行
    2. 正则表达式 sed ‘/pattern/’或 sed ‘/pattern/,/pattern/’
      sed -n ‘/news/’ /etc/passwd 打印passwd中包含news的行
      sed -n ‘/news/,/systemd-network/’ 打印passwd中从包含news的行到包含systemd-network的行

    3. 间隔行 起始行号~间隔大小
      例子: sed -n ‘1~2p’ /etc/passwd从1行开始,每个2行打印一行

    可以用nl命令显示passwd文件的行号

    $nl passwd|sed -n '1~2p'
         1  root:x:0:0:root:/root:/bin/bash
         3  bin:x:2:2:bin:/bin:/usr/sbin/nologin
         5  sync:x:4:65534:sync:/bin:/bin/sync
         7  man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
         9  mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
        11  uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
        13  www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
        15  list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
        17  gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
        19  systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
        21  systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
        23  syslog:x:104:108::/home/syslog:/bin/false
        25  messagebus:x:106:110::/var/run/dbus:/bin/false
        27  ntp:x:108:114::/home/ntp:/bin/false
    

    sed高级操作

    {} 多条命令

    用{}括起来用;分隔
    n:读入下一行
    sed -n ‘{n;p}’ /etc/passwd
    结果:输出偶数行

    & 代表前面匹配的字符串

    sed ‘s/root/U&/’ /etc/passwd
    将root替换为ROOT

    用()分组

    1 第一组 2第二组 第n组
    sed ‘s/(^[a-z_-]+):x:([0-9]+):([0-9]+):.*$/USER:1 UID: 2 GID:3/’ /etc/passwd
    取第一个括号、第二个括号、第三个括号里的匹配内容
    ifconfig eth0|sed -n ‘/inet /p’|sed ‘s/inet.r:([0-9.]+).$/1/’
    取ip地址

    r 读入指定文件插入到匹配行后面

    sed ‘1r abc.txt’ 123.txt
    在123.txt的第1行后面插入abc.txt的内容

    w 将匹配行写入指定文件

    sed ‘1w abc.txt’ 123.txt
    将123.txt的第1行写入abc.txt
    注意如果abc.txt已经存在,则原有的内容会被丢失。

    q 退出sed

    sed ‘/false/q’ /etc/passwd
    匹配到模式后就执行q,退出sed

    sed操作实例

    取网卡eth0的ip地址

    ifconfig eth0|sed -n ‘/inet/s/i.r://p’|sed ‘s/ B.$//’

    取系统内存大小

    free -h|sed ‘/total/d’|sed ‘/Swap/d’|sed ‘s/Mem://’|awk ‘{print $1}’

    获取系统版本号

    cat /etc/issue|sed ‘s/^([a-zA-Z]+) ([0-9.]+) (.*$)/2/’

  • 相关阅读:
    IIS中ASP.NET安全配置
    好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
    js取两位小数点
    json格式的ajax传输交互
    js全选与反选
    formdata,ajax提交数据
    js判断是否微信浏览器、IE浏览器
    js实现列表从下往上循环滚动
    绝对定位始终居中
    存储、字符串截取、两端对齐、样式绑定、微信调拨号功能
  • 原文地址:https://www.cnblogs.com/infoflow/p/8975276.html
Copyright © 2020-2023  润新知