经常用到的几个sed命令

来源:互联网 发布:淘宝折扣是真的吗 编辑:程序博客网 时间:2024/05/17 22:02

最近写shell脚本,经常用到一些需求,现梳理一下。

 

现在,有一个o.sh,其文件内容如下:

[root@ser6-51 dandan]# cat o.sh

aaaabbbb[mysqld]cccddd[mysqla]eee

 

1:在某行行尾添加内容

#在aaaa这一行最后添加hello这个字符串

#$表示行尾的意思

[root@ser6-51 dandan]# sed -i '/aaaa/s/$/hello/' o.sh

[root@ser6-51 dandan]# cat o.sh

aaaahellobbbb[mysqld]cccddd[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

aaaahellobbbb/usr/local/mysql[mysqld]cccddd[mysqla]eee


2:在某一行后面添加新行

 

#在ccc这一行后面添加一个新行hello(用\n表示换行)

[root@ser6-51 dandan]# sed -i '/ccc/s/$/\nhello/' o.sh

[root@ser6-51 dandan]# cat o.sh

aaaahellobbbb/usr/local/mysql[mysqld]ccchelloddd[mysqla]eee

 

3:往文件最后添加一行

#在文件末尾添加一行hello dandan

[root@ser6-51 dandan]# echo -e "hello dandan" >> o.sh

[root@ser6-51 dandan]# cat o.sh

aaaahellobbbb/usr/local/mysql[mysqld]ccchelloddd[mysqla]eeehello dandan

 

4:删除某一行

将hello dandan那一行删除

  

aaaahellobbbb/usr/local/mysql[mysqld]ccchelloddd[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

aaaahellobbbb/usr/local/mysql[mysqld]cccddd[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

aaaahellobbbb[mysqld]cccddd[mysqla]eee


注意:sed命令单引号之间的内容都是以/开头和结尾的,切勿落掉了/.

 

6:替换特定行的特定内容

类似于5删除特定行的特定内容,只需要添加替换后的内容即可。

如:

[root@ser6-70 download]# cat a.sh[mysqld]datadir=/var/lib/mysqleewaaehellodate

将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/dataeewaaehellodate


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,到时再多做补充。

0 0
原创粉丝点击