sed命令行编辑器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为lclg为全部 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 wordUUID=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 wordtmpfs /dev/shm tmpfs defaults 0 0devpts /dev/pts devpts gid=5,mode=620 0 0sysfs /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 2015423423894u234u2p93423423423523523523523## 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 1UUID=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 0tmpfs /dev/shm tmpfs defaults 0 0devpts /dev/pts devpts gid=5,mode=620 0 0sysfs /sys sysfs defaults 0 0proc /proc proc defaults 0 0
把第5行到第7行都追加一次这个文件的内容
sed '5,7raaaaa'fastabsed '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逐行替换为OOTsed 's/oot/OOT/'fstab我把fstab,每行首次出现斜杠/替换为#,注意逃逸字符sed 's/////#/' fstab只对行首出现的斜杠/做处理sed 's/^////#/' fstrabg对找到的匹配进行全局替换,把/替换为#sed 's/////#/g'i忽略大小写,与g用法一样
【正则表达式】
&引用整个字符串,不管前面的字符串有多长正则表达式,把模式引用起来,后向引用源文件内容hello ,likehi ,my love执行命令 sed 's#l..e#&er#g' sed.txt或者执行sed 's#/(l..e/)#/1er#g' sed.txthello ,likeerhi ,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