https://www.jianshu.com/p/ceea435635a2

大多数情况下,对于文件内容的修改需要依赖交互式的软件来实现,例如vim修改文件的内容则是依赖光标的移动和修改操作来完成对文件某一处内容的修改。然而,在linux操作系统中,也存在一种非交互式的方法来修改文件内容,通过发送特殊的指令给终端使其完成对特定内容文件的修改。

sed(Stream editor) 正是一种非交互的流式编辑器。sed 支持修改一个输入流(文件或管道)中的文本或字段的值,且因为只会对输入的流文件进行一次处理,因此 sed 的工作效率要比其他的编辑器更加高效。而能够从管道(Pipeline)中获取过滤输入流,这也是sed相比其他编辑器的显著区分。

语法

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

参数含义

  • -n, --quiet, --silent: 抑制命令执行过程中的打印信息

  • -e script: 指定的脚本中的命令将被执行

  • -f script-file: 指定的脚本文件中是sed的编辑命令

  • --follow-symlinks: 对于链接文件,替换的时候源文件也会进行替换

  • -i[SUFFIX]: 编辑文件进行替换(如果提供了SUFFIX,则进行备份)。默认没有指定 -i 的情况下,sed只将指令的结果打印到终端,不会修改文件的内容。

  • -c, --copy: 使用-i选项的时候用复制代替重命名

  • --posix: 禁用GUN扩展

  • -r: 使用扩展正则表达式

替换标记

  • g: 替换每行中匹配到的所有字符

  • p: 打印被sed程序处理过的行

  • d: 指定行将被删除

  • s: 替换指定字符串

详细用法

  • 删除文件中指定的行
#wc -l /tmp/passwd
39 /tmp/passwd #sed -i '11,39d' /tmp/passwd # 删除11-39行的记录 && 指令-i后才会修改文件 #wc -l /tmp/passwd
10 /tmp/passwd
  • 删除文件的最后一行
#sed -i '$d' /tmp/passwd

#wc -l /tmp/passwd
9 /tmp/passwd
  • 删除文件中的匹配行
#sed -i '/nologin$/d' /tmp/passwd       # nologin$ 表明匹配以nologin结尾的行; 对应的 ^nologin 表明以nologin为首的行

#wc -l /tmp/passwd
4 /tmp/passwd
  • 删除输入流中的空行
#sed -i '/^$/'d /tmp/passwd
  • 替换一行中的第一个匹配到的字符串
#cat -n /tmp/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin #sed -n 's/mail/exchange/p' /tmp/passwd
exchange:x:8:12:mail:/var/spool/mail:/sbin/nologin
  • 替换一行中所有匹配到的字符串
#sed -n 's/mail/exchange/gp' /tmp/passwd
exchange:x:8:12:exchange:/var/spool/exchange:/sbin/nologin
  • 从每行匹配到的第2处开始替换
#sed -n 's/mail/MAIL/2p' /tmp/passwd
mail:x:8:12:MAIL:/var/spool/mail:/sbin/nologin
  • 在指定行前增加一条记录
    说明: 使用sed对文件进行插入内容时,仅对有行数的文件有效;类似于空文件(没有行记录),插入操作无效
#sed '2 i\***********************  ' /tmp/passwd
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
operator:x:11:0:operator:/root:/sbin/nologin
  • 在指定行后增加一条记录
#sed '2 a\***********************  ' /tmp/passwd
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
operator:x:11:0:operator:/root:/sbin/nologin
  • 通过管道接收上一条命令的输出并修改命令输出结果
#echo $LANG
en_US.UTF-8 #echo $LANG | sed 's/en_US/zh_CN/'
zh_CN.UTF-8
  • 注释文件中的所有行
#sed -i 's/^/#/' /tmp/passwd

#cat /tmp/passwd
#root:x:0:0:root:/root:/bin/bash
#sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt:x:7:0:halt:/sbin:/sbin/halt
  • 删除文件中每行的第一个字符
#sed -i 's/^.//1' /tmp/passwd

#cat /tmp/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
  • 根据匹配到的内容注释指定的行
#sed -n 's/root/#root/p' /tmp/passwd
#root:x:0:0:root:/root:/bin/bash

[转帖]Linux三剑客之sed的初阶使用的更多相关文章

  1. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  2. (转)不看绝对后悔的Linux三剑客之sed实战精讲

    不看绝对后悔的Linux三剑客之sed实战精讲 原文:http://blog.51cto.com/hujiangtao/1923718 二.Linux三剑客之sed命令精讲 1,前言 我们都知道,在L ...

  3. day14 linux三剑客之sed命令

    day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...

  4. Linux 三剑客之sed

    目录 Linux 三剑客之sed 命令补充: sort命令 uniq命令 cut命令 tr命令 wc命令 三剑客 - sed 编辑模式: 定位分类: 实例如下: d模式--删除模式 p模式--打印 a ...

  5. Linux 三剑客 -- awk sed grep

    本文由本人收集整理自互联网供自己与网友参考,参考文章均已列出,如有侵权,请告知! 顶配awk,中配sed,标配grep awk 参考 sed 参考 grep 参考 在线查看linux命令速记表 app ...

  6. Linux三剑客grep/sed/awk

    grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color ...

  7. linux三剑客之sed命令

    一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...

  8. linux三剑客之sed深度实践

    参数: -a:追加文本到指定行后 -i:插入文本到指定行前 1.单行增加 [root@redhat~]#   sed  ' 2a  6,f '  linux.tet 1,a 2,b 6,f 3,c 4 ...

  9. 【linux三剑客】sed命令

    sed - stream editor for filtering and transforming text sed 流编辑器 strem edition,实现对文件的增删改替换查是Linux中第二 ...

  10. Linux三剑客之sed

    sed sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像.sed按顺序逐行读取文件.然后,它执行为该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可 ...

随机推荐

  1. Linux 中查看文件系统的块大小

    有时可能需要查看 Unix 操作系统中有关于文件基本单元的块大小,以便对有的系统进行适当的优化(如 MySQL),本文将介绍几种在 Unix 上以及类 Unix 操作系统上可行的查看方式 检查文件系统 ...

  2. 动态规划问题(四)最长双音序列长度(LBS)

    问题描述 ​ 以一个乱序的数组,求它的最长双音序列长度.双音序列指该序列先递增,再递减. ​ 如: 对于序列 {1, 11, 2, 10, 4, 5, 2, 1},它的最长双音序列长度为 6, 对于序 ...

  3. [极客大挑战 2019]EasySQL 1

    [极客大挑战 2019]EasySQL 1 观察题目,发现为登录界面,判断这道题的考点是SQL注入. 知识点 万能密码 知识点原理 当用户尝试登录时 网站后台会进行SQL查询,比如 [select * ...

  4. 细说SQL与ETL之间的小秘密

    本文分享自华为云社区<GaussDB数据库SQL系列-SQL与ETL浅谈>,作者:Gauss松鼠会小助手2. 一.前言 在SQL语言中,ETL(抽取.转换和加载)是一种用于将数据从源系统抽 ...

  5. 实践案例丨ACL2020 KBQA 基于查询图生成回答多跳复杂问题

    摘要:目前复杂问题包括两种:含约束的问题和多跳关系问题.本文对ACL2020 KBQA 基于查询图生成的方法来回答多跳复杂问题这一论文工作进行了解读,并对相关实验进行了复现. 1.摘要 1.1 复杂问 ...

  6. 华为云云原生数据库GaussDB加速创新,企业核心数据上云信赖之选

    集大会演讲.圆桌讨论.精彩活动及现场直击....一大波华为开发者大会2021干货资料来喽~~!还等什么快快来领取技术福利! 摘要:华为开发者大会(Cloud)上,华为云发布了云原生数据库GaussDB ...

  7. 为什么vacuum后表还是继续膨胀?

    摘要: 对于更新和删除操作频繁的表,会存在大量垃圾数据,导致磁盘空间的浪费和查询扫描时额外的IO开销,需要定期执行清理操作(vacuum)来控制行存表以及表上索引的膨胀.本文将对vacuum的原理以及 ...

  8. 莉莉丝游戏与火山引擎 ByteHouse 达成合作,为实时数仓建设提速

    中国头部游戏公司莉莉丝游戏(Lilith Games)和火山引擎 ByteHouse 达成合作,共同致力于加速莉莉丝游戏的实时数仓建设.此次合作将利用 ByteHouse 的创新技术和功能,为莉莉丝的 ...

  9. Solon Web 开发:二、开发知识准备

    1.约定 //资源路径约定(不用配置:也不能配置) resources/app.yml( 或 app.properties ) #为应用配置文件 resources/WEB-INF/static/ 或 ...

  10. jdk1.8: Consumer函数

    场景: 当我们在a方法中,需要把某些参数赋值给一个Integer类型的对象,而该对象只有在b方法才能赋值,那么我们可以在a方法中使用consumer记录我们要执行的操作,再把consumer作为参数传 ...