sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式的插入、删除或者替换数据中的文本。流编辑器则会自爱编辑器处理数据之前基于预习提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行输入,要么存储在一个命令文件中。sed会执行下列操作:

(1)一次从输入中读取一行数据。

(2)根据所提供的编辑器命令匹配数据

(3)安装命令修改流中的数据

(4)将新的数据输出到STDOUT

在流编辑器将所有命令与一行数据匹配完毕后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中的所有数据行后,它就会终止。

由于命令是按顺序逐行执行的,sed编辑器只需对数据流进行以便处理就可以完成编辑操作。这使得sed编辑器要比交互式编辑器快得多,可以快速完成对数据的自动修改。

用法

sed [option]… 'script' intputfile

1 常用选项

-n:不输出模式空间内容到屏幕,既不自动打印
-e:多点编辑
-f:/PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
-r:支持使用扩展正则表达式
-i.bak:备份文件并原处编辑

script:

"地址命令"

2 地址定界

(1)不给地址:对全文进行处理

(2)单地址:

#:指定的行

/pattern/:被此处模式所能够匹配到的每一行

(3)地址范围:

#,#
#,+#
/pat1/,/pat2/
#,/pat1/

(4)~:步进

1~2 奇数行

2~2 偶数行

3 基本编辑命令

d:删除模式空间匹配的行
p:显示模式空间中的内容
a[\]text:在指定行后面追加文本,支持使用\n实现多行追加
i[\]text:在行前面插入文本
c[\]text:替换行为单行或多行文本
w /path/somefile:保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
= :为模式空间中的行打印行号
! :模式空间中匹配行取反处理
s/oldstr/newstr/:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g:行内全局替换
p:显示替换成功的行
w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

4 常用命令

(1)打印第N行

[root@local ~]# sed -n '2p' /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

(2)打印第N至M行

[root@local ~]# sed -n '1,4p' /etc/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

(3)打印所有包含关键字string的行

[root@local ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

(4)打印从第N行开始到有关键字string 的行

[root@local ~]# sed -n '1,/root/p' /etc/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

(5)显示空行行号

[root@local ~]# sed -n '/^$/=' /etc/fstab

1

(6)在关键字行后追加文字

[root@local ~]# sed '/root/a\superman' /etc/passwd
root:x:0:0:root:/root:/bin/bash
superman
bin:x:1:1:bin:/bin:/sbin/nologin
[……]
operator:x:11:0:operator:/root:/sbin/nologin
superman
games:x:12:100:games:/usr/games:/sbin/nologin
[……]

(7)在关键字string行前追击文字

[root@local ~]# sed '/root/i\superman' /etc/passwd
superman
root:x:0:0:root:/root:/bin/bash
[……]
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
superman
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[……]

(8)替换行为单行或多行文本

[root@local ~]# sed '/root/c\superman' /etc/passwd
superman
bin:x:1:1:bin:/bin:/sbin/nologin
[……]
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
superman
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[……]

(9)删除指定行

[root@local ~]# sed '1,10d' /etc/passwd
或[root@local ~]# cat -n /etc/passwd |sed '1,10d'
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

(10)在指定行后追加文字

[root@local ~]# nl /etc/passwd |sed '2a tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

(11)在关键字追加文本

[root@local ~]# sed -n 's/root/&superman/p' /etc/passwd
rootsuperman:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/rootsuperman:/sbin/nologin

(12)在关键字前追击文本

[root@local ~]# sed -n 's/root/superman&/p' /etc/passwd
supermanroot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/supermanroot:/sbin/nologin

(13)全局查找替换

[root@local ~]# sed 's/UUID/hahaha/g' /etc/fstab
[……]
hahaha=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
hahaha=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
hahaha=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(14)使用多个编辑器命令

[root@local ~]# sed -e 's/UUID/hahaha/g' -e 's/=/###/g' /etc/fstab
[……]
hahaha###227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
hahaha###7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
hahaha###12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(15)修改前备份

先把/etc/fstab复制到当前目录下,以防止直接修改

[root@local ~]# cp /etc/fstab .
[root@local ~]# sed -i.bak 's/=/$$$$$/g' fstab
[root@local ~]# cat fstab fstab.bak
[……]
UUID$$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
UUID$$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
UUID$$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
[……]
UUID=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
UUID=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
UUID=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
[root@local ~]#

(16)从文件中读取编辑命令

[root@local ~]# cat script1.sed
s/=/$$$$/
s/UUID/mytest/ [root@local ~]# sed -f script1.sed fstab
[……]
mytest$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
mytest$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
mytest$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

文本三剑客---sed 基础的更多相关文章

  1. 文本三剑客---gawk基础

    gawk程序是Unix中原始awk程序的GNU版本.gawk程序让流编辑器迈上了一个新的台阶,它提供了一种编程语言而不只是编辑器命令.在gawk编程语言中,可以完成下面的事情: (1)定义变量来保存数 ...

  2. Linux文本三剑客-sed

    sed工作原理: sed: Stream Editor.流编辑器 --- 属于行编辑工具 sed和vim一样都是文本编辑工具. 行编辑工具:一行一行处理文件内容 全屏编辑工具:一次性将文件内容加载到内 ...

  3. Linux文本三剑客超详细教程---grep、sed、awk

    awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...

  4. 6.文本三剑客之sed

    文本三剑客之sed 目录 文本三剑客之sed sed编辑器 sed概述 sed工作流程 sed用法 sed打印 sed删除 sed替换 sed增加行内容 sed剪切粘贴与复制粘贴 sed字符/字符串交 ...

  5. linux之sed基础命令详解

    sed (Stream  EDitor)是一个强大的字符流编辑器,输入一般是来自文件,默认情况下不编辑原文件,仅对模式空间中的数据作处理;而后,将模式空间打印到屏幕显示 sed基础用法 sed [op ...

  6. 文本处理sed常用操作

    文本处理sed常用操作 linux sed (stream editor) is a Unix utility that parses and transforms text, using a sim ...

  7. linux基础—课堂随笔05_文本三剑客之SED

    1.简介 sed是非交互式的编辑器,它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...

  8. 文本三剑客之sed

    sed是一个流编辑器(sed是stream editor的缩写),它可以对从标准输入流中得到的数据进行处理,然后把处理以后得到的结果输出到标准输出,而标准输出通常会关联到终端屏幕,因此处理后的结果也会 ...

  9. 文本处理工具——sed基础

    一sed介绍 三剑客是grep,sed,awk,功能都很强大. 其中sed是Stream EDitor,流编辑器 行,编辑器的简写,它一次处理一行内容. sed的强大在于可以对文件进行修改,很适合在脚 ...

随机推荐

  1. Java中常见的数据结构的区别

    把多个数据按照一定的存储方式,存储起来,称存储方式之为数据结构. 数据的存储方式有很多,数组,队列,链表,栈,哈希表等等. 不同的数据结构,性能是不一样的,比如有的插入比较快,查询比较快,但是删除比较 ...

  2. js基础回顾-数据类型和typeof怎么用

    js的基本数据类型有六种,undefined.null.number.string.boolean.object. 未定义        空      数字        字符串    布尔     ...

  3. Cookie的作用以及封装的方法

    Cookie相当于本地储存(local Storage),也是一种储存信息的方式. 它通过 document.cookie ='name=value' //name name值 value value ...

  4. 【Python3之面向对象的程序设计】

    一.面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据. 简单来说,就是直接编写 0 和 1 ...

  5. 用html5调取谷歌地图获取位置

    function getmap(){ if(!navigator.geolocation) throw "Geolocation not supported"; var image ...

  6. 聊聊RocksDB Compact

    | 导语 对于 LevelCompact 策略,RocksDB会根据每一层不同的策略计算出CompactScore,根据CompactScore大小来决定那一层将会优先进行Compact,然后选择Le ...

  7. flask 扩展之 -- flask-script

    一. 使用 Flask-Script 支持命令行选项 1. 安装 $ pip install flask-script 2. 配置 from flask_script import Manager m ...

  8. PHP 判断是否包含在某个字符串中

    1.用strpos函数,查找字符首次出现的位置,如果不存在则会返回false$str= 'abc';$needle= 'e';$pos = strpos($str, $needle);2.用strst ...

  9. Kubernetes 设计概要

    英文原文:Kubernetes Design Overview Overview Kubernetes builds on top of Docker to construct a clustered ...

  10. Chapter 4. The MPEG-4 and H.264 Standards

    本章节介绍一些关于MPEG-4标准与H.264标准的基本知识 比较重要的是第95页关于两种标准的对比表格.其他部分没有什么特别重要的细节.