什么是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 第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/’

sed命令入门的更多相关文章

  1. sed 命令使用入门

    上一篇说了 awk 命令的基本使用方法,这一篇就来说说其兄弟 sed 的使用方法吧(传说之中,Linux 命令行下处理文件文件三大上古神器:grep.awk.sed,每一个都很好很强大,有时间了说说 ...

  2. sed从入门到深入的使用心得

    本人已经此系列的sed文章整理到pdf中,欢迎下载:玩透sed:探究sed原理 sed系列文章: sed修炼系列(一):花拳绣腿之入门篇sed修炼系列(二):武功心法(info sed翻译+注解)se ...

  3. 20165321预备作业3:Linux安装及命令入门

    Linux安装 在老师给的VirtualBox的网站上面,我下载了VirtualBox的最新版本,安装成功后,我又下载了Ubuntu.但是,发现无论是哪个版本的Ubuntu都无法在VirtualBox ...

  4. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  5. linux下shell脚本中sed命令的用法

    先来给一个案例: #将old.sql文件中的符号“|”替换为“,”,并保存到test.sql文件中 sed "s/|/,/g" "old.sql"> te ...

  6. 本人常用的sed命令用法

    如果使用sed命令修改文件,需要为sed命令指定[-i]选项(i,insert表示插入指令),下面是本人常用到的几种场景: 1. 在文件最后一行的下一行添加配置 如:在配置文件/etc/profile ...

  7. 文本处理三剑客之sed命令

    第十八章.文本处理三剑客之sed命令 目录 sed介绍 sed命令常用选项 sed常用编辑命令 sed使用示例 sed高级语法 18.1.sed简介 sed全名stream editor,流编辑器,s ...

  8. linux shell 用sed命令在文本的行尾或行首添加字符

    转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...

  9. linux sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

随机推荐

  1. Spring注解:InitBinder

    注解 InitBinder 是用来初始化绑定器Binder的,而Binder是用来绑定数据的,换句话说就是将请求参数转成数据对象. @InitBinder用于在@Controller中标注于方法,表示 ...

  2. JS 通过url地址栏获取html页面名称

    有的时候需要获取页面名称,为此我在这里封装了一个方. 一.分别根据传递不同的参数,获取到html页面的名称. 通过传递参数,获取到html页面的名称:参数params 以下是参数解释说明 (1)par ...

  3. 正则表达式grep命令

    grep命令 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查:打印匹配到的行. 模式::由正则表达式字符及文本字符所编写的过滤条件 语法:grep [OPTIONS] PATTE ...

  4. 【Leetcode 做题学算法周刊】第七期

    首发于微信公众号<前端成长记>,写于 2020.01.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 12 ...

  5. 如何应用threejs实现立方体每个面用图片替换

    var geometry = new THREE.BoxGeometry(200, 200, 200);var materialsbg = []; for (var i = 0; i < geo ...

  6. Go 每日一库之 cobra

    简介 cobra是一个命令行程序库,可以用来编写命令行程序.同时,它也提供了一个脚手架, 用于生成基于 cobra 的应用程序框架.非常多知名的开源项目使用了 cobra 库构建命令行,如Kubern ...

  7. 引用dll出现的问题:发生一个或多个错误,引用无效或不支持该引用

    获取到新的项目后,然后FineUI就出现黄色的标志,肯定是不可以用的,需要重新引用下. 然后我就开始重新引用下,就出现下面的问题: 因为是购买的UI,一开始我怀疑是引用的版本不一样呢,其实都不是 只需 ...

  8. flink编译支持CDH6.2.0(hadoop3.0.0)

    准备工作 因为在编译时需要下载许多依赖包,在执行编译前最好先配置下代理仓库 <mirrors> <mirror> <id>nexus-aliyun</id&g ...

  9. crawler碎碎念4 关于python requests、Beautiful Soup库、SQLlite的基本操作

    Requests import requests from PIL import Image from io improt BytesTO import jason url = "..... ...

  10. GP工作室—团队项目总结

    GP工作室-团队项目总结 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ 这个作业要求在哪里 ...