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 命令将这些 ...
随机推荐
- linux socket读数据错误解释
EINTR 表示某种阻塞的操作,被接收到的信号中断,造成的一种错误返回值. EAGAIN 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作( ...
- web常见几种处理图标方法 【转】
方法一: 用background制作小图标 像这样,拿到设计稿后把所有的图标放在一张图片上,利用background-position.width.height来控制图标的位置及大小. 代码: .ic ...
- 工作总结 string类型保存 "" 这种类型
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- HDU 1009:FatMouse' Trade(简单贪心)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- ucosii任务切换OS_TASK_SW()
stm32F103中任务切换定义 //任务切换宏,由汇编实现. #define OS_TASK_SW() OSCtxSw() os_cpu_a.asm中任务切换函数的定义 NVIC_INT_CTRL ...
- CSS实现子级窗口高度随低级窗口高度变化及js控制左右容器高度一致
纯粹使用使用height:100%;或者height:auto;来定义内部容器自适应高度,都无法实现让内部容器高度随着外部父容器高度变化而变化,所以我们必需要使用position绝对定位属性来配合协助 ...
- js将用户上传gif动图分解成多张帧图片
js将用户上传gif动图分解成多张帧图片 写在前面 工作中遇到一个这么一个需求:这是一个多图上传的场景,如果用户上传选择多张图片,则上传后直接展示多张图片,如果上传的图片是gif动图,则需要分解这张动 ...
- sigpending
信号的阻塞:通过sigprocmask()将信号集sigset_t中的信号设置为阻塞.SIG_BLOCK是指对相应信号的“递送阻塞”,内核在递送一个原来被阻塞的信号给进程时(而不是在产生该信号时),才 ...
- hud项目lcd调试
lcd规格: 像素:480x280 bpp:16 pix_format:RGB565 在开发板终端中执行: ls /dev/fb0 -l ---> crw-rw---- 1 root ...
- View拖拽 自定义绑定view拖拽的工具类
由于工作需求,需要用到这种处理方法所以我就写了这个 废话不多说先看效果图 接下来就看代码吧 DragDropManager import android.app.Activity; import an ...