zoukankan      html  css  js  c++  java
  • 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/’

  • 相关阅读:
    6-Python爬虫-分布式爬虫/Redis
    ES 查询时 排序报错(fielddata is disabled on text fileds by default ... )解决方法
    Intellij Idea webstorm 激活
    Intellij Idea 配置jdk
    java 获取(格式化)日期格式
    js 跳转 XSS漏洞 预防
    CSS去掉背景颜色
    js对象无法当成参数传递 解决方法
    Elasticsearch java api
    java多条件查询SQL语句拼接的小技巧
  • 原文地址:https://www.cnblogs.com/infoflow/p/8975276.html
Copyright © 2011-2022 走看看