流编辑器sed知识点总结
sed(流文本编辑器)
每次读取一行到模式空间中,
修改的sed模式空间中的内容,并不会修改源文件,
继而输出模式空间的内容,
最后删除模式空间中的内容。
sed [OPTION]... [SCRIPT] [INPUTFILE...]
-r: 使用扩展的正则表达式
-n, --quiet, --silent: 不输出模式空间的内容
例:sed -n '1d' test
命令执行过后是空白的,因为不输出模式空间中的内容
-i: 直接编辑原文件
-e: -e '' -e '' -e ''
'CMD1;CMD2;CMD3'
例:sed -e '1d' -e '2p' test
连续执行两条命令,删除第一行,第二行输出两遍
sed '1d;2p;3=' test
连续执行三条命令
-f /path/to/sed_script: 从指定的文件读取处理脚本
例:1d;2p;3=
sed -f 脚本文件 要处理的文本
地址定界:
#(行号):指定行
例:sed '1d' test
删除第一行
sed '1,10d' /etc/passwd
第一行到第十行执行删除命令,即删除前10行
$: 最后一行
例:sed '$d' test
删除最后一行
/regexp/: 任何能够被regexp匹配到的行
例:sed '/dev/d' test
删除包含dev的行
\%regexp%: 任何能够被regexp匹配到的行,换用%为边界符,边界符是可以被替换的
例:sed '\%/dev/mapper%d' test
sed '\@/dev/mapper@d' test
sed '\#/dev/mapper#d' test
删除包含/dev/mapper的行
/regexp/I: 匹配时忽略大小写
例:sed '/dev/Id' test
删除包含dev的行,同时忽略大小写
addr1,addr2:指定范围内的所有行
0,/regexp/
#(行号),#(行号)
/regexp/,/regexp/
#(行号),+#(行号)
first~step: 指定起始位置,以及步长1~3
例:sed '1,+2d' test
删除第1行及其后边两行,即从第四行开始打印
sed '1~2d' test
从第一行开始删除,且之后间隔两行的也被删除
基本正则表达式元字符:
字符:.[] [^]
次数:* \+ \? \{i,j\}
分组:\(\)
锚定:^ $ \< \>
或者:\|
后向引用:\1 \2
编辑命令:
注意:命令之前可以使用!表示取反操作
例:sed '1~2!d' test
不删除匹配行
=:显示行号
例:sed -n '\%/dev/mapper%=' test
只显示包含/dev/mapper行的行号,不显示内容
d: 删除匹配到的行
p: 打印模式空间中的内容
通常与-n选项一同使用
例:sed -n '5,7p' test
只打印第5,6,7三行
sed '5,7p' test
会打印整个文件,但同时第5,6,7行会被打印两遍
a \text: 追加字符
例:sed '1a \bbb' test
在第一行后边追加bbb
i \text:插入文本
i \text1\ntext2\ntext3 插入多行文本
c \text:change,把匹配到的行替换为给定的文本,替换整行
例:sed '3c \bbb' test
把第三行替换为bbb
s/*/*/: 替换命令
g: 全局替换
i: 不区分大小写
例:sed 's/dev/etc/' test
替换dev为etc,且只会替换每行中的第一个dev
sed 's/dev/etc/g' test
全局替换dev为etc
练习1:删除/boot/grub/grub.conf文件中所以空白开头的行行首的空白;
sed 's/^[[:space:]]\+//g' /boot/grub/grub.conf
解析:^[[:space:]]\+ 是正则表达式
^ 行首锚定
\+ 匹配其前面的字符至少一次
练习2:删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符;
sed 's/^#[[:space:]]\+//' /etc/fstab
练习3:echo一个文件路径给sed命令,取出其基名;取出其目录名;
# echo "/etc/sysconfig/" | sed 's@[^/]\{1,\}/\?$@@g'
练习4:替换/etc/inittab文件“id:数字:initdefault:”一行中的那个数字为6;
# sed 's@id:[0-9]:initdefault:@id:6:initdefault@' /etc/inittab
高级编辑命令:
h: 用模式空间中的内容覆盖保持空间中的内容;
H:把模式空间中的内容追加至保持空间;
g: get, 从保持空间取回数据至模式空间,覆盖模式空间中原有的内容;
G:GET, 从保持空间取回数据至模式空间,追加于模式空间中现有的内容后面;
x: 把模式空间和保持空间中的内容进行交换;
n: 读取匹配到的行下一行至模式空间;
N: 追加读匹配到的行下一行至模式空间;
d: 删除模式空间中的内容;
D:删除多行模式空间中首行;
例:sed '1!G;h;$!d' FILE
执行结果:从行尾到行首,逐行输出
先取第一行,判断,是第一行,所以不执行G命令,执行h命令,判断,不是最后一行,执行d
读取第二行,判断,不是第一行,执行G命令,执行h命令,判断,不是最后一行,执行d
读取第三行,判断,不是第一行,执行G命令,执行h命令,判断,是最后一行,不执行d
显示文件的偶数行:sed -n 'n;p' FILE; sed -n '2~2p' FILE
1
2
3
4
显示文件的奇数行:sed -n 'p;n' FILE; sed -n '1~2;p' FILE
练习:用sed将文件的奇数行与偶数行合并为一行,中间用“&&”隔开;
# sed '$!N;s@\n@\&\&@g' /etc/issue
练习:说明以下sed命令的意义:
(1) sed '$!N;$!D' /etc/issue
(2) sed '$!d' /etc/issue
(3) sed 'G' /etc/issue
(4) sed '/^$/d;G' /etc/issue
(5) sed 'n;d' /etc/issue
(6) sed -n '1!G;h;$p' /etc/issue
可以参考如下博客,讲的很详细:
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html
流编辑器sed知识点总结的更多相关文章
- Shell 基础 -- 流编辑器 sed 详解
一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多, ...
- 流编辑器sed
sed与grep一样,都起源于老式的ed编辑器,因其是一个流编辑器(stream editor)而得名.与vi等编辑器不同,sed是一种非交互式编辑器(即用户不必参与编辑过程),它使用预先设定好的编辑 ...
- 快速理解linux流编辑器sed命令
原创 杜亦舒性能与架构 之前介绍过 awk 命令,sed 命令同样是非常重要的文本处理工具,涉及到linux shell开发时,几乎是避不开这两大利器的 sed 是 stream editor 的简写 ...
- shell脚本学习笔记 (流编辑器sed)
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用很普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出. sed不 ...
- Linux下的sed流编辑器命令详解
sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...
- SED单行脚本快速参考(Unix 流编辑器)(转)
sed.sourceforge.net被封杀,特在此处贴上官方的sed 使用说明文档 SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE S ...
- Linux sed 流编辑器
sed是stream editor的简称,也就是流编辑器.盗用一张图片解释原理 命令格式: SYNPPSIS: sed [OPTION]… {script-only-if-no-other-scrip ...
- SED单行脚本快速参考(Unix 流编辑器)
------------------------------------------------------------------------- SED单行脚本快速参考(Unix 流编辑器) 200 ...
- centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课
centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~ ...
随机推荐
- jQuery addClass() 源码解读
addClass: function( value ) { var classes, elem, cur, clazz, j, i = 0, len = this.length, proceed = ...
- Vue.js - day7
使用mui的tab-top-webview-main完成分类滑动栏 兼容问题 和 App.vue 中的 router-link 身上的类名 mui-tab-item 存在兼容性问题,导致tab栏失效, ...
- 【CSS】纯css实现立体摆放图片效果
1. 元素的 width/height/padding/margin 的百分比基准 设置 一个元素 width/height/padding/margin 的百分比的时候,大家可知道基准是什么? 举 ...
- Oracle汇总
1.数据库事务并发会产生那些问题?有哪些隔离级别,分别能够避免什么错误,而无法避免什么错误? a.事务并发会导致三种问题:脏读.不可重复读.幻象读 脏读:读取了未提交的数据 不可重复读:前后读取同一行 ...
- 系统相册中获取gif图片 保证取到的图片不会改变
NSURL *imageRefURL = [info valueForKey:UIImagePickerControllerReferenceURL]; ...
- Assertion failure layoutSublayersOfLayer:], /SourceCache
现象:代码在simulator上能够正常运行但是在真机上出现 Assertion failure in -[UIView layoutSublayersOfLayer:], /SourceCache/ ...
- UVA1001 Say Cheese (dijkstra)
如果没有洞,那么任意两点的最短距离就是直线距离,洞里是瞬间的,所以看成一个点就行了(其实点也可以当作半径为0的洞来处理),洞到洞的最短距离都是圆心距离减去半径.剩下的就是求单源最短路径,是完全图,用不 ...
- Mac 安装和卸载 Mysql5.7.11 的方法
安装 去http://www.mysql.com/downloads/, 选择最下方的MySQL Community Edition,点击MySQL Community Server的download ...
- 一、新手必会Python基础
博客内容: 1.基础语法 2.运算符 3.流程控制 4.列表.元组.字典.集合 5.字符串 6.文件操作 一.基础语法 1.标识符 命名规则: 以字母.下划线开头 其他部分由字母.数字或下划线组成 不 ...
- 运用模逆运算(同余方程)来解决Matlab课上的一道思考题
一道Matlab编程题 & 暴力解法 Matlab课上老师出了这样一道题: 一个篮子有K个鸡蛋: 2个2个拿剩1个: 3个3个全部拿完: 4个4个拿剩1: 5个5个拿剩4个: 6个6个拿剩3个 ...