Linux三剑客之老二-------sed命令详解
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed的处理流程,简化后是这样的:
1.读入新的一行内容到缓存空间;
2.从指定的操作指令中取出第一条指令,判断是否匹配pattern;
3.如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;
4.如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;
5.当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
6.当所有行都处理完之后,结束;
具体流程见下图:

[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
sed删除整行
删除2-4行的代码,d删除
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed '2,4d'
1 hello
5 nihao
6 nihao
7 nihao
从第三行删除最后一行
sweet@sweet-virtual-machine:~/work$ nl a1.txt
1 hello
2 hello
3 world
4 nihao
5 nihao
6 nihao
7 nihao
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed '3,$d'
1 hello
2 hello
sed在指定行后添加一行(a新增)
在第一行后新增一行‘I LOVE YOU’,代码如下:
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed '1a I LOVE YOU'
hello
I LOVE YOU
hello
world
nihao
nihao
nihao
nihao
增加多行代码,需在行末加上‘\’
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed '2a I LOVE\
> YOU'
hello
hello
I LOVE
YOU
world
nihao
nihao
nihao
nihao
sed在指定行前添加一行(i插入)
在第一行前插入一行‘I LOVE YOU’,代码如下:
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed '1i I LOVE YOU'
I LOVE YOU
hello
hello
world
nihao
nihao
nihao
nihao
sed以行为单位的替换与显示(c替换)
替换2-5的数据为‘this is 2-5 number’
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed '2,5c this is 2-5 number'
hello
this is - number
nihao
nihao
sed只打印出符合条件的内容
打印2-5的内容(-n:只有经过sed 特殊处理的那一行(或者动作)才会被列出来。p:打印)
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed -n '2,5p'
hello
world
nihao
nihao
数据的搜寻并执行命令
在a.txt文件中搜索'hello',代码如下:
搜索并显示数据
sweet@sweet-virtual-machine:~/work$ sed -n '/hello/p' a1.txt
hello
hello
搜索并删除数据
sweet@sweet-virtual-machine:~/work$ sed '/hello/d' a1.txt
world
nihao
nihao
nihao
nihao
多命令操作(用{}括起来,命令之间用;隔开)
在a1.txt中查找hello的行,并把world替换为blueshell(s:取代),代码如下:
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed -n '/hello/{s/world/blueshell/;p}'
helloblueshell
hello
多点编辑(-e)
删除a1.txt第4行到最后一行的内容,并把world替换为blueshell
sweet@sweet-virtual-machine:~/work$ nl a1.txt | sed -e '3,$d' -e 's/world/blueshell/'
helloblueshell
hello
直接修改文件内容(危险动作)
把a1.txt中行末的.替换为!(g:获得内容缓冲区的内容,并替换为当前模板的文本内容)
sweet@sweet-virtual-machine:~/work$ sed -i 's/\.$/\!/g' a1.txt
sweet@sweet-virtual-machine:~/work$ cat a1.txt
helloworld!
hello!
world!
nihao!
nihao!
nihao!
nihao
在最后一行的末尾加上‘done’
sweet@sweet-virtual-machine:~/work$ cat a1.txt
helloworld!
hello!
world!
nihao!
nihao!
nihao!
nihao
done
由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『done』!
Linux三剑客之老二-------sed命令详解的更多相关文章
- linux每天一小步---sed命令详解
1 命令功能 sed是一个相当强大的文件处理编辑工具,sed用来替换,删除,更新文件中的内容.sed以文本行为单位进行处理,一次处理一行内容.首先sed吧当前处理的行存储在临时的缓冲区中(称为模式空间 ...
- 转 linux之sed命令详解
http://jingyan.baidu.com/article/fec4bce2228f60f2618d8bb0.html sed 编辑裁剪文件命令 sed -i "s/\/db\/te ...
- Linux学习之sed命令详解
概述 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区 ...
- 【转】【Linux】sed命令详解
sed命令详解 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令 ...
- Linux shell sed 命令详解
详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...
- sed命令详解 vim高级技巧 shell编程上
第1章 sed命令详解 1.1 查找固定的某一行 1.1.1 awk命令方法 [root@znix ~]# awk '!/oldboy/' person.txt 102,zhangyao,CTO 10 ...
- (转)Linux内核参数设置sysctl命令详解
Linux内核参数设置sysctl命令详解 原文:https://www.zhukun.net/archives/8064 sysctl是一个允许您改变正在运行中的Linux系统的接口. 它包含一些 ...
- LINUX的磁盘管理du命令详解
LINUX的磁盘管理du命令详解 du(disk usage)命令可以计算文件或目录所占的磁盘空间.没有指定任何选项时, 它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作 ...
- linux sort,uniq,cut,wc命令详解
linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...
随机推荐
- js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
代码如下: /** 音乐播放器 * @param obj 播放器id * @param file 音频文件 mp3: ogg: * @param loop 是否循环 */ function audio ...
- JS倒计时效果
[html] <div id="time"></div> <script> var pad = function(num){ return nu ...
- VS2015 解决方案 或者项目 卡 正在加载 的解决办法
导致项目无法打开以及VS无法关闭. 解决方法: 1.关闭VS: 2.去C:\Users\<your users name>\AppData\Local\Microsoft\VisualSt ...
- CronTrigger中cron表达式使用
1.定时任务,当执行是具体时间的时候,不会立即执行,而是到指定时间执行. 2.实现Job接口时候,类中要有无参的public构造方法. 3.表达式中共用七个字段,按顺序是秒.分.时.日.月.周.年,默 ...
- 使用 NGUI Toggle 制作单选框
好久没写了,今天来把关于NGUI的做的简单功能发上来~ 这个是做单选框的.用了新版本的NGUI后,发现没有以前的Checkbox了,在网上查了之后才知道是用Toggle代替了以前的Checkbox.现 ...
- linux下使用Stunnel配置与使用方式一例
第一部分:stunnel的安装与配置 注:在ubuntu下,stunnel的安装很简单快捷. 在synaptic(安立得工具系统下可以直接选举安装) 在服务器环境下,直接使用apt-get insta ...
- go的sync.Map
sync.Map这个数据结构是线程安全的(基本类型Map结构体在并发读写时会panic严重错误),它填补了Map线程不安全的缺陷,不过最好只在需要的情况下使用.它一般用于并发模型中对同一类map结构体 ...
- Linux 文件管理(C语言库函数三)
找到当前目录 char *getcwd(char * buf,size_t size) getcwd函数把当前工作目录的绝对路径名复制到buf中,size指示buf的大小 如果buf不够大,不能装下整 ...
- TLS,SSL,HTTPS with Python(转)
From: 扫盲 HTTPS 和 SSL/TLS 协议[0]:引子 需要了解的背景知识: 术语 HTTPS,SSL,TLS 长连接与短连接的关系 了解 CA 证书 基本流程 一.术语扫盲 1.什么是S ...
- asp.net c#采集需要登录页面的实现原理及代码
当我们采集页面的时候,如果被采集的网站需要登录才能采集,原理搞清楚了,就好办了,我们所要做的仅仅是在采集的时候(或者说HttpWebRequest提交数据的时候),将Cookie信息放入Http请求头 ...