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 命令将这些 ...
随机推荐
- SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤
1. 纳入版本控制 ①新建文件abc.txt ②在文件上点右键 ③添加后文件图标发生变化 2. 提交 ①使用TortoiseSVN可以提交具体某一个文件,或某一个目录下的所有改变.方法就是在想要提交的 ...
- vs2015+opencv-3.2.0-vc14配置
用的VS2015免费的community社区版,功能足矣. 很早就有配置opencv249,原本觉得低版本的稳定,一直没有配成功过,测试总是报错 出现error LINK:无法打开文件“opencv_ ...
- Android Volley框架的几种post提交请求方式
首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Vol ...
- 联想电脑Win8升级win10后Wlan关闭无法开启解决办法
官网下载电源驱动,下载无线网上驱动 开启电脑 按fn+f5 电源管理界面就出来了 把无线网卡打开 就ok了 这样就开启了无线! 如果还不行,可进行如下尝试,希望有所帮助: 1.开机进bios(一般是按 ...
- Linux 中 eclipse 的tomcat端口号被占用
1.打开ubuntu启动器(快捷键是 win)--键入 sys--找到 系统监视器(System Monitor) 2.打开系统监视器--找到进程中的java 这个进程--结束该进程
- C语言基础(17)-作用域
一个C语言变量的作用域可以是代码块 作用域,函数作用域或者文件作用域. 不推荐写法 int a; // 出现了语法的二义性,可能是声明也可能是定义,所以最好定义完成之后声明 void func(); ...
- (html)前端如何验证token的合法性来判断用户是否登录?
问题: (html)前端如何验证token的合法性来判断用户是否登录?描述: 1.我使用了JWT的方式,后端生成了一个token,将其返回给前端,前端获取到后每次请求接口都附带上这个token,后端来 ...
- Redis入门经典——The Little Redis Book (翻译)
The Little Redis Book By Karl Seguin 关于本书:本书全然免费下载.你能够任意转载,复制.但请你注明作者.Karl Seguin.译者,WY. 以及不要用于商业用途. ...
- Oracle----Oracle 11g XE release2安装与指导
今天上午我安装了Oracle 11g企业版,发现太占内存了,考虑到MS SQL有express版本,所以寻思着尝试尝试Oracle 11g的express版本,就是EX版本.下面是具体的安装步骤. 1 ...
- Android Studio--NDK编译C代码为.so文件,JNI调用
前言: 从Android Studio开始,就支持jni和.so库调用了. 环境: Windows 7+Android Studio2.1.2+NDK版本:android-ndk-r10e 准备工作: ...