1.命令功能

sed非交互式的流编辑器,sed不会修改源文件内容,除非重定向来保存输出结果;默认情况下所有的输出行都将被打印到屏幕上。

2.语法格式

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

sed  选项     ‘操作命令’ 输入文本

sed 常用选项说明

选项

功能

-n

安静模式,只输出被sed处理的行

-f

指定一个sed脚本文件到命令行执行

-r

sed使用扩展正则

-i

直接修改文件读取的内容,不在屏幕上输出

sed操作命令

sed命令

功能

a\

在当前行后添加一行或多行文本

i\

在当前行插入文本

q

结束或退出sed

r

从文件中读取输入行

c\

用文本替换或修改选中的行

d

删除行

h[H]

复制[追加]模式空间中的内容到缓存区

g

将缓存区的内容,复制到模式空间,覆盖该处原有的内容

G

将缓存区的内容,复制到模式空间,追加在原有内容后面

p

打印行

替换标志

s/regexp/replacement/

将regexp内容替换成replacement

g

在行内全局替换

p

打印行

w

将行写入文件

x

交换暂存缓冲区与模式空间的内容

y | y/source/dest/

将字符转换成另一个字符(不能对正则表达式使用y命令)

3.使用范例

示例1 p命令,打印包含root的行

[root@localhost ~]# sed '/root/p' test.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash #打印内容
bin:x:1:1:bin:/bin:/sbin/nologin

示例 2 n安静模式,只打印包含root的行

[root@localhost ~]# sed -n '/root/p' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

示例3 d删除命令,删除行

[root@localhost ~]# cat -n test.txt
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
[root@localhost ~]# sed '3d' test.txt   #第三行“daemon:x:2:2:daemon:/sbin:/sbin/nologin”被删除
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

删除第1行到第3行

[root@localhost ~]# sed '1,3d' test.txt
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

删除包含root的行

[root@localhost ~]# sed '/root/d' test.txt    #删除包含root的行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

示例4 替换:s命令

全局nologin替换成no

[root@localhost ~]# sed 's/nologin/no/g' test.txt   #s表示替换,g表示全局
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/no
daemon:x:2:2:daemon:/sbin:/sbin/no
adm:x:3:4:adm:/var/adm:/sbin/no
lp:x:4:7:lp:/var/spool/lpd:/sbin/no

注:如果没有g,只会替换每一行的第一个nologin。

示例5 a追加命令

在第2行后追加“hello boy welcome to linux”

[root@localhost ~]# sed '2a hello boy welcome to linux' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
hello boy welcome to linux #在第2行后追加内容
daemon:x:2:2:daemon:/sbin:/sbin/nologin

在第2行后追加2行“hello world\nwelcome to linux”

[root@localhost ~]# sed '2a hello world\nwelcome to linux' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
hello world #追加的第一行
welcome to linux #追加的第二行
daemon:x:2:2:daemon:/sbin:/sbin/nologin

示例6 i插入命令

在第2行位置插入”hello world”

[root@localhost ~]# sed '2i hello world' test.txt
root:x:0:0:root:/root:/bin/bash
hello world #在第2行插入的内容
bin:x:1:1:bin:/bin:/sbin/nologin

在第2行位置插入2行“hello world\nwelcome to linux”

[root@localhost ~]# sed '2i hello world\nwelcome to linux' test.txt
root:x:0:0:root:/root:/bin/bash
hello world #插入的第一行
welcome to linux #插入的第二行
bin:x:1:1:bin:/bin:/sbin/nologin

示例7 d删除命令

删除第2行

[root@localhost ~]# sed '2d' test.txt #源文件第二行的内容’ bin:x:1:1:bin:/bin:/sbin/nologin’
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat -n test.txt |sed '2d'
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

删除第2行到第4行

[root@localhost ~]# cat -n test.txt |sed '2,4d'
1 root:x:0:0:root:/root:/bin/bash
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

示例8 p输出指定行

输出文件第2行内容

[root@localhost ~]# cat -n test.txt |sed '2p'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
2 bin:x:1:1:bin:/bin:/sbin/nologin #p输出的内容

示例9 sed 选项-i命令使用

-i 直接写入到文件里,不在屏幕上现象

在test.txt文件25行插入写入如下几行

hello boy
welcome to linux
linux is fun
thank you
[root@localhost ~]# sed -i '25i hello boy\nwelcome to linux\nlinux is fun\nthank you' test.txt
[root@localhost ~]# cat -n test.txt |tail -7
23 joe:x:502:502::/home/joe:/bin/bash
24 chu:x:503:503::/home/chu:/bin/bash
25 hello boy #插入内容
26 welcome to linux #插入内容
27 linux is fun #插入内容
28 thank you #插入内容
29 dbus:x:81:81:System message bus:/:/sbin/nologin

示例10 打印指定范围内的行

[root@localhost ~]# sed -n '/joe/,/chu/p' test.txt
joe:x:502:502::/home/joe:/bin/bash
chu:x:503:503::/home/chu:/bin/bash

示例11 修改:c命令

c命令将修改模式空间中的内容,模式空间中的内容被修改,源文件内容不变。

[root@localhost ~]# sed '/root/c  hello boy\' test.txt
hello boy
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat test.txt #源文件内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

示例12 转换:y 命令

把root字符串对应转换成AAAA

[root@localhost ~]# sed  'y/root/AAAA/' test.txt
AAAA:x:0:0:AAAA:/AAAA:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nAlAgin
daemAn:x:2:2:daemAn:/sbin:/sbin/nAlAgin

示例13 取出网卡IP地址

[root@localhost ~]# ifconfig |sed -n '/inet addr/p' |cut -d ":" -f2 |cut -d ' ' -f1
172.16.2.10
127.0.0.1

sed 流编辑命令的更多相关文章

  1. 文本处理三剑客之 Sed ——高级编辑命令

    本篇介绍sed的高级编辑命令 高级编辑命令 P:打印模式空间开端至\n内容,并追加到默认输出之前 n: 读取匹配到的行的下一行覆盖至模式空间 N:读取匹配到的行的下一行追加至模式空间 h: 把模式空间 ...

  2. 文本处理三剑客之 Sed ——一般编辑命令

    sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...

  3. Linux下的sed流编辑器命令详解

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

  4. mac上执行sed的编辑 -i命令报错sed: 1: "test.txt": undefined label ‘est.txt’或sed: 1: "2a\test\": extra characters after \ at the end of a command

    问题一 sed编辑命令:[sed -i 's/a/b/g' test.txt]   报错:sed: 1: "test.txt": undefined label 'est.txt' ...

  5. grep,awk和sed的常用命令和语法

    Grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:“m y s t r i n g”.这样做有两个原因,一是以防被误解为 s h ...

  6. Shell:sed流编辑器

    转载:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvdv.html sed和awk是永远地痛,学了又忘,主要是木有横向对比过,所以总把握不到精髓.它可以完美 ...

  7. shell基础 -- grep、sed、awk命令简介

    在 shell 编程中,常需要处理文本,这里介绍几个文本处理命令. 一.grep 命令 grep 命令由来已久,用 grep 命令来查找 文本十分方便.在 POSIX 系统上,grep 可以在两种正则 ...

  8. Linux echo, sort, sed 等一些命令总结

    linux echo, sort, sed是初学linux shell script 的一些常用的命令.基本上来说,如果能够掌握了这些命令,我们就能写出一些不错的linux脚本.以下是我遇到的以下常用 ...

  9. 正则表达式 grep文本查询 sed流处理 应用

    一.正则表达: ^:以什么什么开头,^a:以a字符开头 $:以什么什么结尾,b$:以b字符结尾 *:左边字符0-无穷个 +:左边字符1-无穷个 .:代表单字符 ?:前导字符为零个或1个 {n}:左面字 ...

随机推荐

  1. mysql 安装相关

    Mysql 是基于C/S端的管理文件的服务器软件. Mysql简单分为两个软件:1服务器软件 2客户端软件 对于服务器软件中的socket服务器是一只开着的,客户端需要连接,并且还有创建文件删除文件等 ...

  2. idea使用 git 撤销commit 原

    填写commit的id  就可以取消这一次的commit

  3. Vue中computed、methods、watch的联系和区别

    computed是计算树形,methods是方法. new Vue({ el: '#example', data: { message: 'Hello' }, computed: { reversed ...

  4. jquery自动播放音频文件

    使用jquery自动播放音频文件 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  5. Mysql 创建函数出现This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA

    This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary mys ...

  6. Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库

    Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1    : TDataSource; Clie ...

  7. idea中@data不生效

    idea中@data不生效,原因是idea中没有安装插件,记得重启

  8. 测开之路一百四十七:用WTForms实现编辑功能

    接上一篇的内容 把原先的数据库模型全部给默认值,后面form赋值的时候就不用传位置参数了 把视图逻辑修改一下 # 视图层from datetime import datetimefrom flask. ...

  9. wpf 非窗体类中 异步调用窗体与控件

    App.Current.Dispatcher.Invoke((Action)(() => { MessageBoxWindow mwb = ); mwb.ShowDialog(); return ...

  10. appium输入和清除操作各方法对比(android)

    最近在写android app自动化测试时,发现输入和清除操作耗费时间比较长,下面我用了不同的方法进行输入和清除操作,对比下时间(选取测试的一组数据做分析),选出最佳方法. 1.输入操作 1.1.we ...