码迷,mamicode.com
首页 > 其他好文 > 详细

sed基础用法

时间:2016-08-18 14:42:23      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:linux   表达式 sed   

在linux系统中,sed的文本处理无疑是一个非常强大的工具,用好sed可以使我们工作效率成倍提升,下面就小结一下sed的常用命令参数,只需关注常用的即可。


选项参数

首先来一发sed --help了解一下常用的参数

# sed --help

Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...


  -n  忽略打印输出,一般是避免默认输出,只有我们处理的那一行文本会显示在屏幕上

  -e  在命令行进行文本的处理动作        

  -f   后接脚本文件之类,类似于上面的-e参数,只是将执行的命令放到了一个指定的文件中

  -i   修改文件内容

  -c  当使用上面的-i参数修改文件内容时,为了防止修改错误,会自动生成一个和原始文件内容相同且以c结尾的备份文件               

  -l   后接数字,指定一行的长度

  -r  使用正则表达式


命令参数

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(默认是偶数行,a前面可以指定行号)
c :替换, c 的后面可以接字符串,这些字符串会整行替换掉匹配的行。
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
 i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列号,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,常用的替换字符操作,如 ‘s/aa/bb/g’ ,用于替换匹配的字符。



示例:

# a 新增
[root@localhost ~]# sed ‘3axxxxx‘ t
1
2
3
xxxxx #在第三行后增加指定内容
4
5
[root@localhost ~]# sed ‘2,4axxxxx‘ t 
1
2
xxxxx #在2-4行后每行增加指定内容
3
xxxxx
4
xxxxx
5

# c 替换某一行内容,可以指定行号,也可以匹配内容
[root@localhost ~]# for n in {1..6};do echo "aa$n" >>test.txt;done
[root@localhost ~]# sed ‘2cxxxxx‘ test.txt 
aa1
xxxxx  #替换掉指定行的内容
aa3
aa4
aa5
aa6
[root@localhost ~]# sed ‘2,5cxxxxx‘ test.txt 
aa1
xxxxx  #替换多行
aa6
[root@localhost ~]# sed ‘/aa3/cxxxxx‘ test.txt                     
aa1
aa2
xxxxx  #指定内容匹配替换
aa4
aa5
aa6

# d 删除,可以匹配行号或者内容
[root@localhost ~]# sed 3,5d test.txt 
aa1
aa2    #删除3-5行的内容
aa6
[root@localhost ~]# sed /aa5/d test.txt    
aa1
aa2
aa3
aa4
aa6

# i 插入内容
[root@localhost ~]# sed ‘2ixxxxx‘ test.txt    
aa1
xxxxx  #在第二行之前插入指定内容
aa2
aa3
aa4
aa5
aa6
[root@localhost ~]# sed ‘3,5ixxxxx‘ test.txt      
aa1
aa2
xxxxx  # 3-5行每行前插入指定内容
aa3
xxxxx
aa4
xxxxx
aa5
aa6

# p 打印输出指定的行或内容,不加参数-n会多出一个全局输出
[root@host6 ~]# sed -n 2p aaa.txt  
aabb2
[root@host6 ~]# sed -n 2,4p aaa.txt 
aabb2
aabb3
aabb4
[root@host6 ~]# sed -n /aabb3/p aaa.txt    
aabb3

# s 取代匹配的字符
[root@host6 ~]# sed s/bb3/xx3/ aaa.txt  
aabb1
aabb2
aaxx3   #替换指定内容
aabb4
aabb5
aabb6

除了上面的这一些最基础的用法外,sed 还支持跟加复杂的高级匹配,支持正则,变量和多个匹配字符(address)的匹配。



sed 指定行范围内匹配

[root@host6~]# sed -i ‘1, /test/ s#123#888#g‘ test.txt
[root@host6~]# cat test.txt
test 888
test 888
test 123
test 123

#适合多次过滤匹配,用于筛选条件较多的场景
[root@host6 ~]# cat test.txt 
aabb111
aacc222
bbdd111
bbcc222
zzaa333
eevv111
bbcc222111cvcv
[root@host6 ~]# sed ‘/^bb/ s/222/000/‘  test.txt 
aabb111
aacc222
bbdd111
bbcc000
zzaa333
eevv111
bbcc000111cvcv

#匹配第六行后三行,符合条件的文本内容
[root@host6 ~]# sed  ‘6,/^bb/ s/222/000/‘ test.txt  
aabb111
aacc222
bbdd111
bbcc222
zzaa333
eevv111
bbcc000111cvcv



sed中引用shell变量的四种方法

在使用sed引用变量时可能会出现不成功的情况,下面这些规则能让我们更好的使用sed变量

eval sed ’s/$a/$b/’ filename

sed "s/$a/$b/" filename
sed ’s/’$a’/’$b’/’ filename 
sed s/$a/$b/ filename


简单正则匹配字符的方法

$表示匹配结尾,^ 表示匹配开头, &表示前面匹配的内容,= 表示输出行号。

‘/\.$/d‘         删除以句点结尾行

‘s/[[:space:]]/ /‘   删除一个以上空格,用一个空格代替

‘/^[[:space:]]/d‘    删除行首空格

‘s/[[:space:]]\+//‘ 删除空格

‘/^$/d‘            删除空行

‘s/^.//‘          删除第一个字符,包括空格

以上只是sed的一些基础用法,在实际应用中一般都比这个复杂。


本文出自 “Trying” 博客,请务必保留此出处http://tryingstuff.blog.51cto.com/4603492/1839867

sed基础用法

标签:linux   表达式 sed   

原文地址:http://tryingstuff.blog.51cto.com/4603492/1839867

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!