以下介绍在生信中常用的sed命令。
参考:https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html;http://man.linuxde.net/sed
(1) a 表示 新增,i 表示 插入
#在第2行后面加上“spider”这一字段,即“spider”出现在第3段
cat -n test.txt | sed '2a spider'
#在第2行前面加上“spider”这一字段
cat -n test.txt | sed '2i spider'
#增加两行以上,如在第二行后面加入两行字,“how are you ”与“I'm fine , thank you ” 。注意:每行以反斜杠 \ 结尾,用于添加新的一行
cat -n test.txt | sed '2a how are you \
> I'm fine , thank you '
(2) c 表示 替代
#将第2-5行的内容替代为“spider”
cat -n test.txt | sed '2,5c spider'
(3) d 表示 删除行;搜索某一字段并删除
#删除第2行
cat -n test.txt |sed '2d'
#删除第2-5行
cat -n test.txt | sed '2,5d'
#删除5-最后一行
cat -n test.txt |sed '5,$d'
#搜索“spider”这一字段并删除
cat -n test.txt | sed '/spider/d'
(4) -n 表示 选择/显示某一行或几行;搜索并显示
#仅列出 /etc/passwd 文件内的第 5-7 行
cat -n test.txt | sed -n '5,7p'
#搜索 /etc/passwd有spider关键字的行并显示
cat -n test.txt | sed -n '/spider/p'
(5)数据搜索后再执行别的命令
#搜索/etc/passwd,找到spider对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这一行:
cat -n test.txt | sed -n '/spider/{s/bash/blueshell/;p}'
注:{s/待替换内容/替换成的内容/} ; p 表示打印行
#如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出{q}
cat -n test.txt | sed -n '/bash/{s/bash/blueshell/;p;q}'
(6)数据搜索到之后再替换
#前面已经讲过以整行进行替换,如将第2-5行的内容替代为“spider”
cat -n test.txt | sed '2,5c spider'
#部分字段的替换,格式为 sed 's/要被取代的字串/新的字串/g'
/sbin/ifconfig bond0 #查看本机IP地址为172.18.99.01,下一步需要将改IP取出
/sbin/ifconfig bond0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
注:替换格式为{s/待替换内容/替换成的内容/} ,g 表示行内全面替换;^ 匹配行开始,如:/^sed/匹配所有以sed开头的行;. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d;* 匹配0个或多个字符;前的那个字符到最后一行结束;