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

sed命令行编辑器 【原创】

时间:2015-09-12 01:01:26      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:sed命令行编辑器

sed命令行编辑器


sed是非交互式的编辑器,它按行处理对象文件,但不修改处理文件本身,而是逐行读入文件内容并在临时缓存区保存副本并对其进行处理。处理完成每一行就将该行目标内容打印到屏幕,并将该缓存区内容删除,然后读入下一行进行处理。另外需要注意的是,和grep不同,sed不论是否知道指定的模式,它的退出状态都是0(Linux中通常代表真)。只有存在语法错误时,sed的退出状态才不是0。


用单引号,双引号没有用

默认修改原文件,

-n 静默显示

-i 修改源文件

-e 脚本

-f 指定文件,里面可以有脚本

sed -f /path/脚本路径 file指定的文件

-r 使用扩展表达式


我的原料

var.txt

yum_list

【关于分隔符】与查找内容冲突可以用 / / /, @ @ @ ,# # #

w 命令

【删除行 管理】d

删除第二行 sed ‘4d ‘ var.txt

删除第二行到最后一行 sed ‘4,77d‘ var.txt

删除包含root 的所有行 sed ‘/root/‘d var.txt

替换所有root为lcl g为全部   sed ‘s/root/lcl/g‘ var.txt

删除到最后一行 sed ‘4,$d‘ ll.txt

删除+4行  sed ‘5,+6d‘ll.txt

以反斜线开头的都删除sed ‘/^\//d‘ fatab



【打印 行 管理】p

显示模式空间内容,并把符合条条件的显示两次sed ‘/^\//p‘ fatab

只显示匹到的内容sed -n ‘/^\//p‘ fatab



【行追加】a

在符合条件的行下面追加新的内容  

sed ‘/^\//a \#hello world‘ fstab
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
#hello word
UUID=5dbd32f9-d400-4e24-a7fa-af5199575fe1 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
#hello word
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
#hello word
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0

我要追加两行呢

 sed ‘/^\//a \#hello \n linux‘ fstrab



【在匹配到的前面追加行】i

使用方法与a一样

【在匹配到的行下面,追加一个文件的内容】,也可用于合并文件

在第5行下面把当前路径下的aaaa追加进来 sed ‘5r aaaaa‘ fastab

[root@localhost home]# sed ‘4r aaaaaa‘ fstab 
#
# /etc/fstab
# Created by anaconda on Fri Jun  5 18:17:35 2015
423423894u234u2p93
4234234
23
5
235
23
523523
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=5dbd32f9-d400-4e24-a7fa-af5199575fe1 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

把第5行到第7行都追加一次这个文件的内容

sed ‘5,7raaaaa‘fastab
sed ‘5,7r aaaaa‘fastab 这个空格要不要都可以



w 另存为

在fastab里匹配oot 并保存到当前路径下的haha.txt文件内,默认还会显示一次

sed ‘/oot/w haha.txt‘ fatab

加上-n就不会把默认的显示出来

sed -n ‘/oot/w haha‘ fstab



【s 替换】

把fstab里面的oot逐行替换为OOT

sed ‘s/oot/OOT/‘fstab

我把fstab,每行首次出现斜杠/替换为#,注意逃逸字符

sed ‘s/\//\#/‘ fstab


只对行首出现的斜杠/做处理

sed ‘s/^\//\#/‘ fstrab

g对找到的匹配进行全局替换,把/替换为#

sed ‘s/\//\#/g‘

i忽略大小写,与g用法一样


【正则表达式】

&引用整个字符串,不管前面的字符串有多长

正则表达式,把模式引用起来,后向引用

源文件内容

hello ,like

hi ,my love

执行命令 sed ‘s#l..e#&er#g‘ sed.txt

或者执行 sed ‘s#\(l..e\)#\1er#g‘ sed.txt

hello ,likeer

hi ,my loveer

匹配并修改了文件



遇到匹配模式,只是修改其中一部分 怎么办


把能匹配到l..e的表达式,改为L..eer

sed ‘s#l\(..e\)#L\1er#g‘ sed.txt

hello ,Likeer

hi ,my Loveer


-r 使用扩展表达式

把history的前面空格你删除

history | sed ‘s#[[:space:]]*##g‘ 无论你行首有多少个空格,都给你删掉

显示history历史命令页面的第一段

history | sed ‘s#^[[:space:]]*##g‘ | cut -d‘ ‘ -f1

 


本文出自 “生命不息,折腾不止。” 博客,谢绝转载!

sed命令行编辑器 【原创】

标签:sed命令行编辑器

原文地址:http://990487026.blog.51cto.com/10133282/1693926

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