sed附加命令
追加命令(命令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附加命令的更多相关文章
- linux:sed高级命令之n、N(转)
sed的语法格式: sed [option] {sed-command} {input-file} sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-comm ...
- sed替换命令
sed替换命令 语法为: sed ' [ address-range | pattern-range ] s/original-string/replacement-string/[substitut ...
- sed 常用命令 网址
https://wangchujiang.com/linux-command/c/sed.html https://linux.cn/article-11367-1.html https://juej ...
- 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 ...
- sed 替换命令使用
输入文件不会被修改,sed 只在模式空间中执行替换命令,然后输出模式空间的内容.文本文件 employee.txt 101,John Doe,CEO 102,Jason Smith,IT Manage ...
- sed高级命令
所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行 ...
- Mac 下如何使用sed -i命令
今天在学习Linux的过程中发现了sed这一项指令 首先,sed的全称是:Stream Editor 调用sed命令有两种形式: sed [options] 'command' file(s) sed ...
- 【转】sed单行命令大全
文本间隔: # 在每一行后面增加一空行 sed G # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本中每一行后面将有且只有一空行. sed '/^$/d;G' # 在每 ...
- sed -i命令详解
[root@www ~]# sed [-nefr] [动作] 选项与参数: -n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加 ...
随机推荐
- 输入年份,然后打印出该年的万年历,以及标识出当天日期。相似于linux下的cal -y结果。
public class Permanent { public static boolean isLeapYear(int year){//能被4整除但不能被100整除.或者能被400整除 boole ...
- 常见网络摄像机默认使用的端口,RTSP地址
品牌 默认IP地址 WEB RTSP HTTPS 数据 ONVIF 海康威视 192.168.1.64/DHCP用户名admin 密码自己设 80 554 443 8000 80 大华 192 ...
- 启动两个Tomcat的方法
由于项目需要,所以要启动两个工程,但是又不能用一个Tomcat,于是就琢磨起了怎么启动两个Tomcat 1:首先,conf/server.xml要把HTTP的端口改成不一致的,我一个是8088,一个 ...
- 针对OpenSSL吐嘈的吐嘈-如此唱反调
前些天写了一篇<令人作呕的OpenSSL>,顿时引来了大量的恶评.令我非常尴尬,同一时候也认为悲哀. 假设说you can you up之类的,我认为起码这人看出了我的本意,仅仅是怀疑我的 ...
- jquery 动态绑定bind()及模拟鼠标点击A链接
近来自觉前端有小小进步,幸而记之. 1.两个 css class 紧挨在一起 则在html元素中,要同时拥有这两个class,才能起作用 .block.db{ background-image:url ...
- HBase在大搜车金融业务中的应用实践
摘要: 2017云栖大会HBase专场,大搜车高级数据架构师申玉宝带来HBase在大搜车金融业务中的应用实践.本文主要从数据大屏开始谈起,进而分享了GPS风控实践,包括架构.聚集分析等,最后还分享了流 ...
- Okapi BM25 (BM stands for Best Matching)
Okapi BM25 - Wikipedia https://en.wikipedia.org/wiki/Okapi_BM25 In information retrieval, Okapi BM25 ...
- Java 解析excel2003和2007区别和兼容性问题(POI操作)
最近在使用POI对excel操作中发现一些问题,2003和2007的区别还是蛮大的: 2007相关的包: poi-3.9.jar poi-examples-3.8.jar poi-excelant-3 ...
- YTU 2916: Shape系列-2
2916: Shape系列-2 时间限制: 1 Sec 内存限制: 128 MB 提交: 268 解决: 242 题目描述 小聪不喜欢小强的Shape类,声称用Shape类做出的形状不真实,于是小 ...
- 并不对劲的noip2017d1t3
因为A掉了d1t1,十分开心,把d1t3的代码调出来了. 一般情况下,noip每一天总有一道dp题,然而d1前两道题都不是,再看看第三题的数据范围,就能大概猜出是dp了. 这道题和最短路计数看上去很像 ...