标签: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命令行编辑器
原文地址:http://990487026.blog.51cto.com/10133282/1693926