Ubuntu小技巧14--sed命令详解
Ubuntu小技巧14--sed命令详解
- 1 sed 简介
- 2 正则表达式通配符
- 3 命令选项
- 3.1 命令
- 3.2 选项
- 3.3 举例
- 4 使用案例及注意事项
- 4.1 使用案例
- 4.2 注意事项
- 5 说明
1 sed 简介
Sed是一个简化的非交互式编辑器,它是linux下三大文本处理工具之一(另外两个为grep awk)。 它允许你执行可在vi和ex编辑器使用的相同类型的编辑任务。 sed程序并不是与编辑器交互工作,而是在命令行键入编辑命令、命名文件,然后在屏幕上查看编辑命令的输出。 sed编辑器是非破坏性的,除非使用shell重定向保存输出,否则它不会更改执行操作的文件。 默认情况下,所有行都打印在屏幕上。
工作模式:
sed编辑器一次处理一行文件(或输入)并将其输出发送到屏幕。 它的相关命令我们可以从vi和ed/ex编辑器看到一些类似的用法。 Sed将当前正在处理的行存储在称为模式空间或临时缓冲区的临时缓冲区中,一旦sed完成对模式空间中行的处理(即,在该行上执行sed命令),模式空间中的行就会被输出到屏幕(除非命令是删除行或禁止其打印)。 处理完行后,将其从模式空间中删除,然后将下一行读入模式空间中进行处理并显示。 当处理完输入文件的最后一行时,Sed就结束了。 Sed通过将每一行存储在临时缓冲区中并在该行上执行编辑,该方法使得原始文件永远不会被更改或销毁。其原理如下图所示:
使用格式:sed [OPTION]… {script-only-if-no-other-script} [input-file]…
与grep一样,Sed可以使用正则表达式来完成文本处理,正则表达式是用正斜杠包含的字符模式,主要用于搜索和替换。
方法:sed -n ‘/RE/p’ filename
示例1.1:sed -n ‘/love/p’ datafile
说明:输出包含love的行,注意此处p表示输出,不可缺少
方法:sed -n ‘s/RE/replacement string/p’ filename
示例1.2:sed -n ‘s/love/like/p’ datafile
说明:将包含love的行替换为like,注意此处的s不可少,缺少p后无输出
2 正则表达式通配符
以下为sed中常用正则的标志和功能,以及案例说明:
Metacharacter | Function | Example | What It Matches |
---|---|---|---|
^ | 起始行 | /^love/ | 匹配所有以love开头的行 |
$ | 结尾行 | /love$/ | 匹配所有以love结尾的行 |
. | 匹配一个字符,单不是换行符 | /l…e/ | 匹配包括Ixxe的所有行,xx为任意两个字符 |
* | 匹配0或者多个字符 | / *love/ | 匹配包含0或者多个字符的行,且结尾为love,注意: *love 中 *前面有个空格 |
[ ] | 匹配一个在集合中的字符 | /[Ll]ove/ | 匹配到包括Love或者love的行 |
[^ ] | 匹配一个字符不在集合中 | /[^A–KM–Z]ove/ | 匹配不包括A-K和MZ切接着为ove的行 |
(…) | 保存匹配到的字符 | s/(love)able/\1er/ | 标记部分内容到tag1中(最多有9个tag),以便于后续使用,例如此处将love标记为tag1,后续可以通过\1来表示love;将loveable替换为lover,其中\1即为love |
& | 保存搜索的字符串,以便于在替换的时候使用 | s/love/**&**/ | 保存love, 将 love 替换为 **love**. |
< | 匹配以某个单词开头 | /<love/ | 匹配到包含 一个单词以love开头的行 |
> | 匹配以某个单词结尾 | /love>/ | 匹配到包含 一个单词以love结尾的行 |
x{m} x{m,} x{m,n} |
连续重复字符x m次 连续重复字符x 至少m次 连续重复字符x m-n次 |
/o{5}/ /o{5,}/ /o{5,10}/ |
匹配到 连续出现5次o的行 匹配到 连续出现至少5次o的行 匹配到 连续出现5-10次o的行 |
… |
3 命令选项
3.1 命令
Command | Function |
---|---|
a\ | 追加1或者多行文本到当前行 |
c\ | 使用新的文本内容替换当前行 |
d | 删除行 |
i\ | 在当前行之前插入文本 |
h | 将模式空间的内容复制到缓存空间 |
H | 将模式空间的内容追加到缓存空间 |
g | 获取缓存空间的内容,并将其复制到模式空间(覆盖模式空间的内容) |
G | 获取缓存空间的内容,并将其复制到模式空间(追加到模式空间) |
l | 列出非打印字符 |
p | 按行输出 |
n | 读取下一行,并且用n对应命令处理新行内容(而不是用老方法处理新行内容) |
q | 退出sed命令 |
r | 从文件读出多行数据 |
! | 除选择的内容外,应用该命令到所有的行 |
s | 替换字符串 |
Substitution Flags | |
g | 在行上进行全局替换(默认替换只进行一行,加了g后可以对所有行进行替换) |
p | 输出选中行对应的数据 |
w | 将匹配的行写到指定文件中 |
x | 交换缓存空间和模式空间中的内容 |
y | 转换一个字符为另外一个字符,例如 y/ab/AB 将a转为A,b转为B(cannot use regular expression metacharacters with y) |
示例3.1.1 :sed ‘2,5d’ myfile
说明:删除2-5行数据,即输出不包含2-5行的所有数据
3.2 选项
Options | Function |
---|---|
–e | 增加一个可执行的脚本 |
–f | 将脚本的内容添加到要执行的命令 |
–n | 禁止默认输出 |
-n 和p结合可以输出;单独-n无p就没有输出;
示例3.2.1:sed -n -f f.txt datafile
其中,f.txt 内容为 /dog$/p,其等价为sed -n ‘/dog$/p’ datafile
说明:输出以dog结尾的行。
3.3 举例
datafile内容:
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 2 18
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
示例3.3.1: sed ‘/north/p’ datafile
说明:逐行输出所有内容,包含该north的会重复输出
结果:
northwest NW Charles Main 3.0 .98 3 34
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 2 18
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
示例3.3.2: sed -n ‘/north/p’ datafile
说明:只输出包含该north的行
结果:
northwest NW Charles Main 3.0 .98 3 34
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
示例3.3.3: sed ‘3d’ datafile
说明: 删除第3行
示例3.3.4: sed ‘3,$d’ datafile
说明:从第3行开始全部删除
结果:
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
示例3.3.5: sed ‘$d’ datafile
说明: 删除最后一行
示例3.3.6: sed ‘/[WSN]E/d’ datafile
说明: 删除匹配到WE|SE|NE的行
结果:
northwest NW Charles Main 3.0 .98 3 34
southwest SW Lewis Dalsass 2.7 .8 2 18
southern SO Suan Chin 5.1 .95 4 15
eastern EA TB Savage 4.4 .84 5 20
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
示例3.3.7: sed -n ‘s/^west/north/p’ datafile
说明:匹配到west开头的行,并将west替换为north,然后输出
结果:
northern WE Sharon Gray 5.3 .97 5 23
示例3.3.8: sed ‘s/[0-9][5-9]$/&.5/’ datafile
说明:匹配最后两个为数组,切最后一个在5-9之间的,在这样的行后追加 .5
结果:
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 2 18.5
southern SO Suan Chin 5.1 .95 4 15.5
southeast SE Patricia Hemenway 4.0 .7 4 17.5
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
示例3.3.9: sed ‘s/3/88/g’ datafile 等价 sed ‘s#3#88#g’ datafile
说明: 将所有的3替换为88
示例:3.3.10: sed ‘s/3/88/’ datafile 等价 sed ‘s#3#88#’ datafile
说明: 将最后一个3替换为88
示例3.3.11: sed -n ‘5,/^eastern/p’ datafile
说明: 从第5行开始输出,知道出现的第一个eastern的那一行为止,若一直没有easter则从第5行开始全部输出
结果:
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
示例3.3.12: sed -e ‘1,7d’ -e ‘s/Ann/Bnn/’ datafile
说明: 删除1-7行,然后将Ann替换为Bnn,-e表示可以使用多次规则
结果:
north NO Margot Weber 4.5 .89 5 9
central CT Bnn Stephens 5.7 .94 5 13
示例3.3.13: sed ‘/Suan/r newfile’ datafile
说明:读出newfile中的内容,匹配到Suan后将其追加到Suan所在的行后面
示例3.3.14: sed -n ‘/north/w newfile’ datafile
说明: 将匹配到north的行全部输出到newfile中
示例3.3.15: sed '/^north /a\ This is function of a\ ’ datafile
说明: 匹配到north 开头的行,并追加This is function of a
结果:
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 2 18
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9This is function of a\
central CT Ann Stephens 5.7 .94 5 13
示例3.3.16: sed ‘1,3y/abcdef/ABCDEF/’ datafile
说明: 将 1-3行的abcdef 由小写替换为大写
示例3.3.17: sed ‘/eastern/{ n; s/AM/Archie/; }’ datafile
说明:匹配到eastern后立马处理下一行, 下一行的处理方法为: 将Archie替换为AM
结果:
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 2 18
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE Archie Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
待添加…
4 使用案例及注意事项
4.1 使用案例
后续将在此处逐渐补充一些常用的案例。
- 将脚本中sdx1 替换为sdw1
sed ‘s/sdx1/sdw1/’ -i keeprunning/disk5_keeprunning_v2.sh
此处需要使用-i,其作用为替换后将内容写回到脚本disk5_keeprunning_v2.sh中;
4.2 注意事项
通过\c正则内容c 的方式
方法:sed -n ‘\cREcp’ filename
说明:其中\c c即为正则表达的起始标志,等价于/ /
示例4.2.1:sed -n ‘\cdog$cp’ datafile 和 sed -n ‘/dog$/p’ datafile
说明:\c c 和\ \等价,都是输出以dog结尾的行。sed ‘s/dog/123/’ datafile 、 sed ‘s/dog/123/p’ datafile 和 sed -n ‘s/dog/123/p’ datafile 的区别
第一个不会重复全输出,
第二个全部输出,但是包含dog的行会重复,
最后一个不重复且只输出包含dog的行;sed 中使用变量
vim set_params.sh sed -i "s/build_docker_env/$3/g" -i ./shell_paras.txt 该方法将 shell_paras.txt 中的 build_docker_env 替换为$3 所对应的变量
使用变量的试试需要使用双引号,否则变量$3不生效
5 说明
测试系统版本:Ubuntu 1910 SERVER (64-bit)
参考文献: UNIX® Shells by Example Fourth Edition By Ellie Quigley
Ubuntu小技巧14--sed命令详解相关推荐
- ubuntu下sed命令详解 - Dicky - 开源中国社区
ubuntu下sed命令详解 - Dicky - 开源中国社区 ubuntu下sed命令详解 - Dicky - 开源中国社区 ubuntu下sed命令详解 7人收藏此文章, 我要收藏 发表于 ...
- 【Linux篇】sed命令详解
文章目录 sed命令详解 一.基本语法 二.实操案例 内部命令选项说明 命令选项说明 标志 三.sed小技巧 sed命令详解 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时 ...
- cut\grep\awk\sed命令详解
cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut 选项 文件名 (2)选项作用: -d 分隔符 按照指定的 ...
- Linux的sed命令详解大全
Linux的sed命令详解大全 一.sed命令介绍 二.sed 的运行模式 三.sed的相关选项 四.sed基本用法 1.sed语法 2.sed的查看功能 ①查看passwd文件的第5到第8行内容 ② ...
- linux sed p变量,Linux sed 命令详解系列教程之各种问题解决
本文目录: 1 sed中使用变量和变量替换的问题 2 反向引用失效问题 3 "-i"选项的文件保存问题 4 贪婪匹配问题 5 sed命令"a"和"N& ...
- 【转】【Linux】sed命令详解
sed命令详解 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space ...
- LInux sed命令详解
文章转自:http://qifuguang.me/2015/09/21/sed%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3/#comments sed命令详解 sed是st ...
- linux 之sed命令详解
sed命令详解 sed是什么 sed是linux文本处理三剑客之一,全称 StreamEDitor,非常著名的行编辑器,功能十分强大. sed的工作过程 sed处理文本时每次从文件复制出来一行,放在工 ...
- linux sed.写文件,Linux文件处理sed命令-linux sed命令详解-linux sed写入文件-嗨客网
Linux文件处理sed命令详解教程 Linux sed命令使用 Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 "模式空间"( oattern space ...
- linux sed 命令,Linux sed 命令详解
Linux sed 命令详解 Linux sed 命令是利用脚本处理文本文件. sed 可按照脚本的指令来处理.编辑文本文件. sed 主要用于自动编辑一个或多个文件.简化对文件的反复操作.编写转换程 ...
最新文章
- MyBatis学习总结(9)——使用MyBatis Generator自动创建代码
- HACMP 认证学习系列,第 2 部分-1:计划与设计
- mysql 基于集_一种基于记录集查找特定行的方法_MySQL
- 公共基础选择题—关系代数和范式
- AVIO内存输入模式
- JS中闭包的应用自定义JS模块2
- python安装virtualenv_python安装virtualenv虚拟环境步骤图文详解
- PostGreSQL安装压缩包格式
- 【WebAPI 验证】给 webapi加上token 验证(包括上传文件方法)
- CPU乱序执行基础 —— Tomasulo算法及执行过程
- JPA基础知识----JPA 基本注解,JPA API
- 小程序楼层索引,将汉字转换为拼音并以首字母排序
- 01. Web漏洞靶场的搭建
- 关系型数据库和MySQL作业及答案
- 哲学家就餐问题python实现
- android x86还是arm,Android x86是否模拟ARM?(Does Android x86 emulate ARM?)
- Dart学习笔记六:集合类型详解
- grep -rn搜索服务配置文件信息、log字段信息
- java web怎么实现踢人_【Java】浅谈踢人下线的设计思路!(附代码实现方案)
- 有一点点自恋和臭屁的嫌疑
热门文章
- Java第十二周作业
- iOS解决“The ‘Pods-XXX‘ target has transitive dependencies that include statically linked binaries”报错
- LigaAI X 猴子无限 | AIGC 火了,专业设计者的福音来了!
- 为什么选择电阻式温度传感器呢
- R Shiny module学习笔记
- 数据分析之北京房价复习
- IDEA全局查找快捷键
- 【源起Netty 正传】升级版卡车——ByteBuf
- SAT数学:必背公式之三角函数
- java stl分解_stl文件格式解析代码--java版