sed命令
2016-01-08 16:14
239 查看
sed:Steam EDitor
流编辑器(行编辑器)(全屏编辑器:nano、vi)
模式空间:sed运行过程中维护着两个缓冲区,一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“暂存缓冲区(holding space)”。一般情况下,每当运行sed,sed首先把第一行装入模式空间,进行处理后输出到屏幕,然后将第二行装入模式空间替换掉模式空间里原来的内容,然后进行处理,以此类推。
sed默认不修改原文件,仅对模式空间的内容进行编辑,最后显示模式空间的内容
格式:
sed [option] 'Addresscommand' file ...
address:
startline,Endline
比如1,100 表示第1到100行
$:最后一行
/pattern/
模式匹配到的行,比如/root/,表示包含root的行
/pattern1/,/pattern2/
表示从第一次别模式1匹配到的行开始,到第一次被模式2匹配到的行结束,这中间所有的行
lineNumber
行号所指定的行
startline,+N
从指定的行号开始,向后的N行
Address不写的话,默认是全文
Command:
大P:打印模式空间
p:显示符合条件的行
d:删除符合条件的行
a \string:在指定的行后面追加新行,内容为string
\n:可以用于换行
i \string:在指定的行前面追加新行,内容为string
r FILE:将指定的文件内容追加至符合条件的行后面
w FILE:将指定范围内的内容另存至指定的文件中
s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被查找到的字符串
修饰符:
g:全局替换
i:忽略字符大小写
s///格式也可以用s@@@、s###等
\(\),\1,\2支持正则表达式里面的分组功能
&:引用模式匹配整个串
option:
-n:静默模式,不再默认显示模式空间的内容
-i:直接修改原文件
-e script -e script:可以同时制定多个脚本
-f /path/to/file :从文件中读取脚本
-r :表示使用扩展的正则表达式
s///分组使用示例:
[root@logstach ~]# cat 1.txt
hello ,my love
listen like
假设我们要一次性把1.txt里面l..e能匹配到的字符后面加个r,比如like变成liker,这个时候,用类似s/l..e/string/ 是无法达到我们想要的结果的,但是分组功能或者使用&可以实现:
[root@logstach ~]# sed 's/\(l..e\)/\1r/' 1.txt
hello ,my lover
listen liker
[root@logstach ~]# sed 's/l..e/&r/' 1.txt
hello ,my lover
listen liker
sed练习:
1、删除/etc/grub.conf文件中行首的空白符;
sed 's/^[[:space:]]*//' /etc/grub.conf
2、替换/etc/inittab文件中“id:3:initdefault:”一行中的3为5;
sed 's/id:3:initdefault:/id:5:initdefault:/' /etc/inittab
3、删除/etc/inittab文件中的空白行;
sed '/^$/d' /etc/inittab
4、删除/etc/inittab文件中开头的#号;
sed 's/^#//' /etc/inittab
5、取出一个文件路径的目录名称;
echo "/etc/inittab/" |sed -r 's/^(\/.*\/)[^/]+\/?/\1/g'
\/.*.\/是利用正则的贪婪性取出第一个/到可以匹配的最后一个斜杠内容,就是文件的路径了
\1匹配第一()里面的内容,这里的作用是用第一()的内容替换整个字符串,最后显示
第一个^是行开头的意思
第二个^取非的意思,[^/]+就是不是/的字符一个或者多个,\/?是0或者1个/
由于不在()里面,所以不打印
取路径有很多种方法
${file%/*}
dirname
都可以
本文出自 “单季稻” 博客,请务必保留此出处http://linzb.blog.51cto.com/5192423/1732936
流编辑器(行编辑器)(全屏编辑器:nano、vi)
模式空间:sed运行过程中维护着两个缓冲区,一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“暂存缓冲区(holding space)”。一般情况下,每当运行sed,sed首先把第一行装入模式空间,进行处理后输出到屏幕,然后将第二行装入模式空间替换掉模式空间里原来的内容,然后进行处理,以此类推。
sed默认不修改原文件,仅对模式空间的内容进行编辑,最后显示模式空间的内容
格式:
sed [option] 'Addresscommand' file ...
address:
startline,Endline
比如1,100 表示第1到100行
$:最后一行
/pattern/
模式匹配到的行,比如/root/,表示包含root的行
/pattern1/,/pattern2/
表示从第一次别模式1匹配到的行开始,到第一次被模式2匹配到的行结束,这中间所有的行
lineNumber
行号所指定的行
startline,+N
从指定的行号开始,向后的N行
Address不写的话,默认是全文
Command:
大P:打印模式空间
p:显示符合条件的行
d:删除符合条件的行
a \string:在指定的行后面追加新行,内容为string
\n:可以用于换行
i \string:在指定的行前面追加新行,内容为string
r FILE:将指定的文件内容追加至符合条件的行后面
w FILE:将指定范围内的内容另存至指定的文件中
s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被查找到的字符串
修饰符:
g:全局替换
i:忽略字符大小写
s///格式也可以用s@@@、s###等
\(\),\1,\2支持正则表达式里面的分组功能
&:引用模式匹配整个串
option:
-n:静默模式,不再默认显示模式空间的内容
-i:直接修改原文件
-e script -e script:可以同时制定多个脚本
-f /path/to/file :从文件中读取脚本
-r :表示使用扩展的正则表达式
s///分组使用示例:
[root@logstach ~]# cat 1.txt
hello ,my love
listen like
假设我们要一次性把1.txt里面l..e能匹配到的字符后面加个r,比如like变成liker,这个时候,用类似s/l..e/string/ 是无法达到我们想要的结果的,但是分组功能或者使用&可以实现:
[root@logstach ~]# sed 's/\(l..e\)/\1r/' 1.txt
hello ,my lover
listen liker
[root@logstach ~]# sed 's/l..e/&r/' 1.txt
hello ,my lover
listen liker
sed练习:
1、删除/etc/grub.conf文件中行首的空白符;
sed 's/^[[:space:]]*//' /etc/grub.conf
2、替换/etc/inittab文件中“id:3:initdefault:”一行中的3为5;
sed 's/id:3:initdefault:/id:5:initdefault:/' /etc/inittab
3、删除/etc/inittab文件中的空白行;
sed '/^$/d' /etc/inittab
4、删除/etc/inittab文件中开头的#号;
sed 's/^#//' /etc/inittab
5、取出一个文件路径的目录名称;
echo "/etc/inittab/" |sed -r 's/^(\/.*\/)[^/]+\/?/\1/g'
\/.*.\/是利用正则的贪婪性取出第一个/到可以匹配的最后一个斜杠内容,就是文件的路径了
\1匹配第一()里面的内容,这里的作用是用第一()的内容替换整个字符串,最后显示
第一个^是行开头的意思
第二个^取非的意思,[^/]+就是不是/的字符一个或者多个,\/?是0或者1个/
由于不在()里面,所以不打印
取路径有很多种方法
${file%/*}
dirname
都可以
本文出自 “单季稻” 博客,请务必保留此出处http://linzb.blog.51cto.com/5192423/1732936
相关文章推荐
- 获取手机通讯录信息
- jsoup中select用法详解
- 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查)
- Android5.0以上系统的移动网络开关
- Windows上的代码管理工具git分享
- 前端手册之----CSS1-3 属性手册总结
- JavaScript 面试题
- CentOS 设置 svn 提交后自动自动更新到 web 目录
- 首席信息安全官的未来将何去何从?
- OpenStack neutron-openvswitch-agent 启动分析
- Mysql在Linux卸载
- java.sql.SQLException: 无效的列索引
- Android Fragment详解(五):Fragment与Activity之间的通讯
- 最快让你上手ReactiveCocoa之进阶篇
- MyEclipse 2015优化技巧
- 利用PhantomJS搭建Highcharts export服务
- PHP过滤常用标签的正则表达式
- 首席信息安全官的未来将何去何从?
- java学习之reflection反射
- SCP命令报错 scp: /usr/local/src: not a regular file