经常用到的几个sed命令

原创 2015年07月10日 16:22:22

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

 

现在,有一个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,到时再多做补充。

Linux下面经常用到的几个命令

作者:tinyfun 转自:http://www.iteye.com/topic/1118755 欢迎大家补充。。。 http://blog.csdn.net/hopestar2/art...
  • whw8007
  • whw8007
  • 2013年05月17日 21:54
  • 286

几个经常用到的常规class

/** * 常规类 */ class Fun {    //邮件发送函数          static function send_mail($to, $name, $subject =...
  • qq_34629975
  • qq_34629975
  • 2016年12月01日 09:41
  • 112

经常用到的Linux命令

1、查找文件:find / -name 文件名(/代表在根目录下)    2、ps -ef 命令表示以标准格式显示系统当前进程            UID                 PID  ...
  • zcyhappy1314
  • zcyhappy1314
  • 2013年09月08日 17:43
  • 793

经常用到的命令

Linux Shell 环境中支持输入输出重定向,用符号""来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>a.txt 表示将错误信息...
  • kakaka2011
  • kakaka2011
  • 2015年04月09日 11:01
  • 360

几个经常用到的字符串的截取

string str="123abc456"; int i=3; 1 取字符串的前i个字符    str=str.Substring(0,i); // or  str=str.Remove(i,str...
  • java173842219
  • java173842219
  • 2017年10月24日 11:18
  • 89

Centos7下,sed命令用法介绍

sed: Stream Editor 流编辑器,行编辑器,逐行编辑。 将每行内容读入到内存中,在内存中进行处理,将结果返回给屏幕 ,此段内存空间称为模式空间默认不编辑原文件,仅对模式空间...
  • shuyun123456789
  • shuyun123456789
  • 2017年08月03日 10:55
  • 421

linux/unix命令详解之sed

ps:我只能说别说你会sed。。。这篇综合很多sed文档写成。 1. 功能说明:利用script来处理文本文件。 语  法:sed [-hnV][-e(script)][-f (script文...
  • u012485320
  • u012485320
  • 2013年12月11日 17:47
  • 1044

sed的模式空间和保持空间

sed之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“保持空间(hold space)这2个空间的使用。 ...
  • wanglelelihuanhuan
  • wanglelelihuanhuan
  • 2016年06月06日 17:15
  • 1838

Sed 命令替换文件内容

Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。 命令如下:sed -i “s/原字符串/新字符串/g” `grep 原字符串 -rl 所在目录` 例...
  • z69183787
  • z69183787
  • 2016年12月16日 15:23
  • 633

Sed命令的基本使用

sed介绍粘贴一段wiki的介绍: sed (stream editor) is a Unix utility that parses and transforms text, using a s...
  • Gavin__Zhou
  • Gavin__Zhou
  • 2016年05月30日 11:43
  • 864
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经常用到的几个sed命令
举报原因:
原因补充:

(最多只允许输入30个字)