经常用到的几个sed命令
2015-07-10 16:22
711 查看
最近写shell脚本,经常用到一些需求,现梳理一下。
现在,有一个o.sh,其文件内容如下:
[root@ser6-51 dandan]# cat o.sh
#$表示行尾的意思
[root@ser6-51 dandan]# sed -i '/aaaa/s/$/hello/' o.sh
[root@ser6-51 dandan]# cat o.sh
注意:如果要添加的字符串中包含特殊字符,需要用\进行转义。
比如:这里想在bbbb这一行后面添加:/usr/local/mysql
[root@ser6-51 dandan]# sed -i '/bbbb/s/$/\/usr\/local\/mysql/' o.sh
[root@ser6-51 dandan]# cat o.sh
#在ccc这一行后面添加一个新行hello(用\n表示换行)
[root@ser6-51 dandan]# sed -i '/ccc/s/$/\nhello/' o.sh
[root@ser6-51 dandan]# cat o.sh
[root@ser6-51 dandan]# echo -e "hello dandan" >> o.sh
[root@ser6-51 dandan]# cat o.sh
[root@ser6-51 dandan]# sed -i '/hello dandan/d' o.sh
[root@ser6-51 dandan]# cat o.sh
如果对文件内容特别熟悉,特别有把握,可以这样:
[root@ser6-51 dandan]# sed -i '/^hello/d' o.sh
[root@ser6-51 dandan]# cat o.sh
先定位到以hello开头的那一行,然后删除。
#将这一行bbbb/usr/local/mysql的字符串/usr/local/mysql删除。
[root@ser6-51 dandan]# sed -i '/^bbbb/s/\/usr\/local\/mysql//' o.sh
--注意:这里最后是两个//,否则报错。
[root@ser6-51 dandan]# cat o.sh
注意:sed命令单引号之间的内容都是以/开头和结尾的,切勿落掉了/.
如:
将datadir那一行的/var/lib/mysql替换为/data/mysql/data
全选复制放进笔记sed -n '/^2012-02-09/,/^2012-09-10/p' whole.log > part.log
sed -i '1i\use mysql;' t1.bak
--待深入研究sed,到时再多做补充。
现在,有一个o.sh,其文件内容如下:
[root@ser6-51 dandan]# cat o.sh
aaaa bbbb [mysqld] ccc ddd [mysqla] eee
1:在某行行尾添加内容
#在aaaa这一行最后添加hello这个字符串#$表示行尾的意思
[root@ser6-51 dandan]# sed -i '/aaaa/s/$/hello/' o.sh
[root@ser6-51 dandan]# cat o.sh
aaaahello bbbb [mysqld] ccc ddd [mysqla] Eee
注意:如果要添加的字符串中包含特殊字符,需要用\进行转义。
比如:这里想在bbbb这一行后面添加:/usr/local/mysql
[root@ser6-51 dandan]# sed -i '/bbbb/s/$/\/usr\/local\/mysql/' o.sh
[root@ser6-51 dandan]# cat o.sh
aaaahello bbbb/usr/local/mysql [mysqld] ccc ddd [mysqla] eee
2:在某一行后面添加新行
#在ccc这一行后面添加一个新行hello(用\n表示换行)
[root@ser6-51 dandan]# sed -i '/ccc/s/$/\nhello/' o.sh
[root@ser6-51 dandan]# cat o.sh
aaaahello bbbb/usr/local/mysql [mysqld] ccc hello ddd [mysqla] eee
3:往文件最后添加一行
#在文件末尾添加一行hello dandan[root@ser6-51 dandan]# echo -e "hello dandan" >> o.sh
[root@ser6-51 dandan]# cat o.sh
aaaahello bbbb/usr/local/mysql [mysqld] ccc hello ddd [mysqla] eee
hello dandan
4:删除某一行
将hello dandan那一行删除aaaahello bbbb/usr/local/mysql [mysqld] ccc hello ddd [mysqla] eee
[root@ser6-51 dandan]# sed -i '/hello dandan/d' o.sh
[root@ser6-51 dandan]# cat o.sh
如果对文件内容特别熟悉,特别有把握,可以这样:
[root@ser6-51 dandan]# sed -i '/^hello/d' o.sh
[root@ser6-51 dandan]# cat o.sh
aaaahello bbbb/usr/local/mysql [mysqld] ccc ddd [mysqla] eee
先定位到以hello开头的那一行,然后删除。
5:删除特定行的特定内容
#将这一行bbbb/usr/local/mysql的字符串/usr/local/mysql删除。
[root@ser6-51 dandan]# sed -i '/^bbbb/s/\/usr\/local\/mysql//' o.sh
--注意:这里最后是两个//,否则报错。
[root@ser6-51 dandan]# cat o.sh
aaaahello bbbb [mysqld] ccc ddd [mysqla] eee
注意:sed命令单引号之间的内容都是以/开头和结尾的,切勿落掉了/.
6:替换特定行的特定内容
类似于5删除特定行的特定内容,只需要添加替换后的内容即可。如:
[root@ser6-70 download]# cat a.sh [mysqld] datadir=/var/lib/mysql eew aa e hello date
将datadir那一行的/var/lib/mysql替换为/data/mysql/data
[root@ser6-70 download]# sed -i '/^datadir/s/\/var\/lib\/mysql/\/data\/mysql\/data/' a.sh [root@ser6-70 download]# cat a.sh [mysqld] datadir=/data/mysql/data eew aa e hello date
7:截取部分行到新文件
要切出从2012-02-09到2012-09-10的所有数据行,(假设你的日志文件以yyyy-MM-dd的日期格式开头)只需要:全选复制放进笔记sed -n '/^2012-02-09/,/^2012-09-10/p' whole.log > part.log
8:在首行添加内容
如:在首行添加use mysql;sed -i '1i\use mysql;' t1.bak
--待深入研究sed,到时再多做补充。
相关文章推荐
- MySql触发器,jquery
- eclipse设置项目下文件编码格式
- 使用iOS 8 SDK添加Touch ID指纹识别功能
- HDU 1061 Rightmost Digit (快速幂取余)
- ArcGIS for js API 3.10
- 5-05. QQ帐户的申请与登陆(25)
- 通过权限控制菜单栏菜单的显示和隐藏
- WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
- Azure 网站、云服务和虚拟机比较
- sql 自定义函数返回中文,数字,英文
- MyEclipse根据WSDL文件生成WebService客户端并调用服务端方法
- InstallShield自定义安装界面
- Sublime text3使用心得
- java学习篇------用我自己的方式理解事件
- android listview滑动过程中不加载图片,停止时加载图片。
- 一笔画问题(并查集+无向欧拉图)
- android 杀不死的服务 ,主要是即时通讯,通知及时传送
- 在SQLite中如何用一个表的字段更新另一个表
- Python写入数据到MP3文件中的方法
- 在Qt中移植VPU编解码程序时遇到的问题