追加命令(命令a)

sed ‘[address] a the-line-to-append’ input-file

在第二行后面追加一行(原文这里可能有问题,没有写名行号)

[root@sishen ~]# sed '2 a 203,Jack Johnson,Engineer' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

203,Jack Johnson,Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

在employee.txt文件结尾追加一行:

[root@sishen ~]# sed '$ a 106,Jack Johnny,Engineer' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

106,Jack Johnny,Engineer

在匹配Jason的行后面追加两行

[root@sishen ~]# sed '/Jason/a\

> 203,Jack Johnson,Engineer\

> 204,Mark Smith,Slaes Engineer' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

203,Jack Johnson,Engineer

204,Mark Smith,Slaes Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

追加多行之间可以用\n来换行,这样就不用折行了,上面的命令等价于:

[root@sishen ~]# sed '/Jason/a 203,Jack Johnson,Engineer\n204,Mark Smith,Slaes Engineer' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

203,Jack Johnson,Engineer

204,Mark Smith,Slaes Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

修改命令(命令c)

sed ‘[address] c the-line-to-insert’ input-file

用新数据取代第2行

[root@sishen ~]# sed '2 c 202,Jack,Johnson,Engineer' employee1.txt

101,John Doe,CEO

202,Jack,Johnson,Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

这里命令c等价于替换:sed ‘2s/.*/202,,Jack,Johnson,Engineer/’employee.txt

sed也可以用多行来取代一行

用两行数据取代匹配Raj的行

[root@sishen ~]# sed '/Raj/c \

> 203,Jack,Johnson,Engineer \

> 204,Mark Smith,Slaes Engineer' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

203,Jack,Johnson,Engineer

204,Mark Smith,Slaes Engineer

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

命令a、i、和c组合使用

l a在“Jason“后面追加”Jack Johnson“

l i在“Jason”前面插入”Mark Smith“

l c用“Joe Mason“代替”Jason“

[root@sishen ~]# sed '/Jason/ {

a\

204,Jack Johnson,Engineer

i\

202,Mark Smith,Slaes Engineer

c\

203,Joe Mason,Sysadmin

}' employee.txt

101,Johnnynynyny Doe,CEO

202,Mark Smith,Slaes Engineer

203,Joe Mason,Sysadmin

204,Jack Johnson,Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

打印不可见字符(命令l)

首先建立测试文件

[root@sishen ~]# vim tab.txt

fname First Name

lname Last Name

Mname Middle Name

[root@sishen ~]# sed -n 'l' tab.txt

fname First Name$

lname Last Name$

Mname Middle Name$

$

如果在l后面指定了数字,那么会在第N个字符处使用一个不可见自动折行

[root@sishen ~]# sed -n 'l 20' employee.txt

101,Johnnynynyny Do\

e,CEO$

102,Jason Smith,IT \

Manager$

103,Raj Reddy,Sysad\

min$

104,Anand Ram,Devel\

oper$

105,Jane Miller,Sal\

es Manager$

#106,Jane Miller,Sa\

les Manager$

#107,Jane Miller,Sa\

les Manager$

这个功能只有GNU sed才有

打印行号(命令=)

打印所有行的行号

[root@sishen ~]# sed '=' employee.txt

1

101,Johnnynynyny Doe,CEO

2

102,Jason Smith,IT Manager

3

103,Raj Reddy,Sysadmin

4

104,Anand Ram,Developer

5

105,Jane Miller,Sales Manager

6

#106,Jane Miller,Sales Manager

7

#107,Jane Miller,Sales Manager

提示:把命令=和命令N配合使用,可以把行号和内容显示在同一行上

只打印1,2,3行的行号

[root@sishen ~]# sed '1,3=' employee.txt

1

101,Johnnynynyny Doe,CEO

2

102,Jason Smith,IT Manager

3

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

打印包含关键字“Jane“的行哈,同时打印输入文件中的内容:

[root@sishen ~]# sed '/Jane/=' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

5

105,Jane Miller,Sales Manager

6

#106,Jane Miller,Sales Manager

7

#107,Jane Miller,Sales Manager

如果你想只是显示行号但不显示行的内容,那么使用-n选项来配合命令=:

[root@sishen ~]# sed -n '/Raj/=' employee.txt

3

打印文件的总行数

[root@sishen ~]# sed -n '$=' employee.txt

7

转换字符(命令y)

命令y根据对应位置转换字符,好处之一便是把大写字符转换为小写,反之亦然

如下例子

[root@sishen ~]# sed 'y/abcde/ABCDE/' employee.txt

101,Johnnynynyny DoE,CEO

102,JAson Smith,IT MAnAgEr

103,RAj REDDy,SysADmin

104,AnAnD RAm,DEvElopEr

105,JAnE MillEr,SAlEs MAnAgEr

#106,JAnE MillEr,SAlEs MAnAgEr

#107,JAnE MillEr,SAlEs ManAgEr

把所有的小写字母转换为大写

[root@sishen ~]# sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' employee.txt

101,JOHNNYNYNYNY DOE,CEO

102,JASON SMITH,IT MANAGER

103,RAJ REDDY,SYSADMIN

104,ANAND RAM,DEVELOPER

105,JANE MILLER,SALES MANAGER

#106,JANE MILLER,SALES MANAGER

#107,JANE MILLER,SALES MANAGER

操作多个文件

在/etc/passwd中搜索root并打印出来

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

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

在/etc/group中搜索root并打印出来

[root@sishen ~]# sed -n '/root/ p' /etc/group

root:x:0:

同时在/etc/passwd和/etc/group中搜索root

[root@sishen ~]# sed -n '/root/ p' /etc/passwd /etc/group

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

root:x:0:

退出sed (命令q)

当sed遇到命令q,便立刻退出,当前循环中的后续命令不会被执行,也不会继续循环

打印第一行后退出

[root@sishen ~]# sed '1 q ' employee.txt

101,Johnnynynyny Doe,CEO

打印5行后退出

[root@sishen ~]# sed '5 q ' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

打印所有行直到遇到包含关键字Manager的行

[root@sishen ~]# sed '/Manager/ q' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

注意:q命令不能指定地址范围(或模式范围),只能用于单个文件(或单个模式)

从文件中读取数据(命令r)

[root@sishen ~]# sed '$ r log.txt' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

log: input.txt

log:

log: testing resumed

log:

log:output created

[root@sishen ~]# sed ' /Raj/ r ../sed8awk/log.txt' employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

sed附加命令的更多相关文章

  1. linux:sed高级命令之n、N(转)

    sed的语法格式: sed [option] {sed-command} {input-file} sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-comm ...

  2. sed替换命令

    sed替换命令 语法为: sed ' [ address-range | pattern-range ] s/original-string/replacement-string/[substitut ...

  3. sed 常用命令 网址

    https://wangchujiang.com/linux-command/c/sed.html https://linux.cn/article-11367-1.html https://juej ...

  4. sed扩展命令使用

    [root@b ~]# cat f.txt inet addr:192.168.0.110 Bcast:192.168.0.255 Mask:255.255.255.0[root@b ~]# cat ...

  5. sed 替换命令使用

    输入文件不会被修改,sed 只在模式空间中执行替换命令,然后输出模式空间的内容.文本文件 employee.txt 101,John Doe,CEO 102,Jason Smith,IT Manage ...

  6. sed高级命令

    所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行 ...

  7. Mac 下如何使用sed -i命令

    今天在学习Linux的过程中发现了sed这一项指令 首先,sed的全称是:Stream Editor 调用sed命令有两种形式: sed [options] 'command' file(s) sed ...

  8. 【转】sed单行命令大全

    文本间隔:  # 在每一行后面增加一空行  sed G # 将原来的所有空行删除并在每一行后面增加一空行.  # 这样在输出的文本中每一行后面将有且只有一空行.  sed '/^$/d;G' # 在每 ...

  9. sed -i命令详解

    [root@www ~]# sed [-nefr] [动作] 选项与参数: -n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加 ...

随机推荐

  1. vue 获取当前时间 格式YYYY-MM-DD

    函数封装: /** * 获取当前时间 * 格式YYYY-MM-DD */ Vue.prototype.getNowFormatDate = function() { var date = new Da ...

  2. 【求建议】毕业之声——信院IT类毕业学子经验分享交流会

    一:缘由 在和非常多学子交流,及上课的经历中,发现一个非常普遍的现象:部分大一学生即失去了对学习.对专业的兴趣.有人在迷茫之后奋起直追.从而珍惜利用不多的大学时光努力提高自己.有人在迷茫中沉沦,沉迷于 ...

  3. ganglia监控自己定义metric实践

    Ganglia监控系统是UC Berkeley开源的一个项目,设计初衷就是要做好分布式集群的监控.监控层面包含资源层面和业务层面,资源层面包含cpu.memory.disk.IO.网络负载等,至于业务 ...

  4. poj2488--A Knight's Journey(dfs,骑士问题)

    A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31147   Accepted: 10 ...

  5. udhcp源码详解(五) 之DHCP包--options字段

    中间有很长一段时间没有更新udhcp源码详解的博客,主要是源码里的函数太多,不知道要不要一个一个讲下去,要知道讲DHCP的实现理论的话一篇博文也就可以大致的讲完,但实现的源码却要关心很多的问题,比如说 ...

  6. 【iOS进阶】UIWebview加载搜狐视频,自动跳回客户端 问题解决

    UIWebview加载搜狐视频,自动跳回搜狐客户端 问题解决 当我们用UIWebview(iOS端)加载网页视频的时候,会发现,当真机上有搜狐客户端的时候,会自动跳转到搜狐客户端进行播放,这样的体验对 ...

  7. CUDA编程(十)使用Kahan's Summation Formula提高精度

    CUDA编程(十) 使用Kahan's Summation Formula提高精度 上一次我们准备去并行一个矩阵乘法.然后我们在GPU上完毕了这个程序,当然是非常单纯的把任务分配给各个线程.也没有经过 ...

  8. LiveWriter插入高亮代码插件介绍 基于SyntaxHighighter

    Codeint main() { int i; printf("%d",i); } 插件介绍 辛苦了两人小时写日志不小心浏览器崩溃了,发誓以后一定记得用Word先写好. 将Word ...

  9. bzoj2101【Usaco2010 Dec】Treasure Chest 藏宝箱

    2101: [Usaco2010 Dec]Treasure Chest 藏宝箱 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 418  Solved: ...

  10. fcitx-configtool

    配置输入法