linux学习基础6之sed用法详解
1 sed 又称为流编辑器,它逐行将文本文件中的行读取到模式空间中间去,将符合编辑条件的行进行编辑后输出到显示器上来。默认sed不编辑原文件只处理模式空间中的内容。
2 sed用法
sed [option]‘addresscommand[修饰符]‘ file
2.1 option
-n 采用静默模式,所谓静默模式就是只输出被匹配到的行,不在默认显示模式空间中内容
-i 直接修改原文件
-r 使用扩展的正则表达式
-e 同时连接多个 sed 命令
如sed -e ‘$a \this is end ‘ -ne ‘/\<if\>/p‘ /etc/rc.d/rc 此时就是同时使用了两个sed,
-f 其后接一个文件(文件中保存的内容全是 addresscommand )
2.2 address 搜索范围
1 指定单独某行 进行精确匹配
2 指定某行至某行 如 3,5 表达3-5行
3 3,+N 表示第三行后再接N行
4 /正则表达式/ 表示正则表达式中匹配到的行
5/正则表达式1/,/正则表达式2/ 表示第一次被正则表达式1匹配到的行和被正则表达式2匹配到的行之间的行。
2.3 command 编辑命令
d delete 删除
p printf 打印
a \string 在匹配到行的下面新建一行将string里面内容写入
i \string 在匹配到的行上门新建一行 并写入
r file 将file文件中的内容读取到匹配的行后面
w file 将匹配到的行内容写入文件file中
s /pattern/string/
s /// 1118.www.qixoo.qixoo.com这种表现形式外 还可以是@@@或者### 这中表现形式
\(\) \1 \2 也可以用到 反向引用,当引用是全局的时候 也可以直接用&来引用
2.4 修饰符
-g 全局匹配 表示每一行中所有符合条件的都替换
-i 忽略字符的大小写
练习部分:
1删除 /etc/grup.conf 中行首的空白符
sed s/^[[:space:]]// /etc/grub.conf
sed ‘1,$s/^[[:space:]]//‘ /etc/grub.conf 此处注意s后面没有空格直接接的/
2替换/etc/inittab 中“id=3” 中的数字为5
sed ‘s/id:3/id:5/‘ /etc/inittab
sed ‘$s/id:3/id:5/‘ /etc/inittab
sed ‘$s/^id:3/id:5/‘ /etc/inittab
3删除/etc/inittab 中的空白行
sed ‘/^#$/d‘ /etc/inittab
4删除/etc/inittab文件中开头的#号
sed ‘s/^#//‘ /etc/inittab
5取出一个文件路径中的目录名称
echo "/etc/rc.d/" | sed -r ‘s@^(/.*/)[^/]+/?@\
对上述问题进行分解处理
1 /etc/rc.d/ 搜索^/.*/ 的字符时默认的贪婪模式会搜索到整个字符串/etc/rc.d/
2 /etc/rc.d/ 搜索[^/]+ 默认搜索时的贪婪模式 会匹配一个单词(此处的单词是以字母和数字组成的字符集)etc ;此时若不加“+” 匹配到的是一个字符,[]表示匹配单个字符 [^/] 表示除/之外的单个字符。 [^/]+ 接^/.*/ 之后就表示rc.d 这个单词
当第一部分的贪婪模式和第二部分的都匹配到相同的字符时,第二部分的匹配内容是从后面的单词开始向前面的单词的方向进行匹配的,在反向引用时其就缩小匹配范围 此时紧紧只是匹配了/etc// 这个部分
3/? 在次与^/.*/匹配的范围重合 根据最小范围匹配原则,则最后反向引用匹配的结果为
/etc/
7统计/etc/init.d/functions文件中每个单词出现的次数并排序
sed -r ‘s/[^[:alpha:]]+/\n/g‘ /etc/init.d/functions | sort | uniq -c
linux学习基础6之sed用法详解的更多相关文章
- linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...
- 《Java基础——break与continue用法详解》
Java基础--break与continue用法详解 1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...
- linux四剑客-grep/find/sed/awk/详解-技术流ken
四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望 ...
- Linux学习之/etc/init.d/functions详解
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28773997&id=3996557 /etc/init.d/f ...
- sed用法详解
转载自: SED单行脚本快速参考(Unix 流编辑器) 如侵犯您的版权,请联系:Windeal12@qq.com ------------------------------------------- ...
- 转载:Linux批量远程管理主机命令_pssh用法详解
原文:http://www.linuxidc.com/Linux/2011-12/49635p2.htm (一) 使用前提 中心主机连接远程主机可以通过ssh密钥无密码连接 (二) 命令格式 pssh ...
- Dll学习(二)__declspec用法详解
__declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和 C++语言的ANSI规范,而__declspec是一种 ...
- linux下的mount命令的用法详解
挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式:mount [-t vfstype] [-o option ...
- 转:Linux中find命令-path -prune用法详解
在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下 ...
随机推荐
- HTML5+JS 《五子飞》游戏实现(六)鼠标响应与多重选择
上一章我们提到了如果有多条线上的棋子可以被吃掉,那么游戏需要提示用户,让用户选择吃哪条线上的.另外因为是网页游戏,所以一定要实现鼠标单击棋子可以进行操作. 当鼠标移动棋子上面后,切换鼠标指针为手形,移 ...
- Replace Pioneer注册
以下是目前合法长期使用Replace Pioneer的唯一方法(除了购买之外): Replace Pioneer过期后,会弹出一个注册(Registration)窗口,其中有一个试用选项(Trial ...
- 转一篇Unity的相机动画控制
最近真是忙,连研究细看的时间都没有了,原帖地址:https://alastaira.wordpress.com/2013/11/08/smooth-unity-camera-transitions-w ...
- python学习笔记整理——元组tuple
Python 文档学习笔记2 数据结构--元组和序列 元组 元组在输出时总是有括号的 元组输入时可能没有括号 元组是不可变的 通过分拆(参阅本节后面的内容)或索引访问(如果是namedtuples,甚 ...
- golang: 把sql结果集以json格式输出
func getJSON(sqlString string) (string, error) { stmt, err := db.Prepare(sqlString) if err != nil { ...
- linux下PHP7环境搭建
LAMP环境版本 操作系统:Centos 7 Mysql:5.7.11 Apache:2.4.18 PHP:7.0.4 安装Mysql 下载链接:http://dev.mysql.com/ ...
- MyBatis学习--查询缓存
简介 以前在使用Hibernate的时候知道其有一级缓存和二级缓存,限制ORM框架的发展都是互相吸收其他框架的优点,在Hibernate中也有一级缓存和二级缓存,用于减轻数据压力,提高数据库性能. m ...
- [Mindjet MindManager]思维导图的快捷键操作
来源于:http://www.cnblogs.com/whylaughing/p/5530935.html Mindjet MindManager(思维导图) 快捷键如下: Insert or CTR ...
- 毕向东JAVA基础25天教程目录
视频目录:day01-01-基本常识day01-02-Java的跨平台性day01-03-Java环境搭建(安装)day01-04-Java环境搭建(环境变量配置)day01-05-Java环境搭建( ...
- noip复习模板
我只会这么多 tarjan:codevs 1332 void tarjan(int u) { dfn[u]=low[u]=Time++; s.push(u); for(int i=head[u];~i ...