sed
d命令删除行
sed '2d' filename #删除第2行,打印除第2行外文本
sed '2,4d' filename #删除第2到第4行
sed '$d' filename #删除最后1行
sed '2!d' filename #删除除第2行以外所有行,即只保留第2行
sed '/human/d' filename #删除包含human的行,第4&5行被删除
sed '/^2/d' filename #删除以2开头的行
sed '/test$/d' filename #删除以test结尾的行
sed '/^$/d' filename #删除空行
s命令查找替换
sed 's/RNA/DNA/' filename #s默认只替换每一行第一次匹配到的内容
sed 's/RNA/DNA/g' filename #利用g选项,表示全局匹配,替换所有能够匹配到的值
sed 's/RNA/DNA/n' filename #替换每一行第n个匹配值
sed 's/RNA//g' filename #将RNA替换成空,即删除所有RNA
sed 's/;$/./g' filename #将所有结尾处的‘;’换成‘.’
y命令字符转换
sed 'y/RNA/WDY/' filename #将R替换成W,N替换成D,A替换成Y
上面的例子可能会让你误解这和查找替换不是一样的吗?那换个例子
sed 'y/01234/ABCDE/' filename #将0替换成A,将1替换成2……
#所有的1都被替换成了A……以此例推。
sed 'y/RNA/WD/' filename #如果前后对应的字符数不一致则会报错。
p命令打印
-n参数表示不打印没处理的行
sed 'p' filename #无-n参数 将各行打印2行
sed -n 'p' filename #有-n参数 打印全部列
sed '1p' filename 将第一行打印2行
sed -n '1p' filename #只打印第一段
a/i命令插入文本
sed '3 i line3' filename # i表示在行之前插入
sed '/3#/ i line' filename # 匹配第3行,在第3行前插入
sed '3 a LINE' filename # a表示在行之后插入
n命令读取下一行,用下一个命令处理新的行
sed '/1#/ {n; s/RNA/DNA/g}' filename
#首先匹配1#即第1行,然后替换命令处理下一行即第2行
#可以看出,n命令是两行为一个单位进行处理的,其中第一行为匹配行而非处理行。
一次执行多个命令
sed 's/RNA/DNA/g; y/12345/ABCDE/' filenam
&元字符保存搜索字符用来替换其他字符
sed 's/RNA/&AA/g' filename #在RNA后添加AA
sed '/RNA/ {s//&AA/g}' filename #作用同上
=命令打印被处理行行号及内容
sed '/RNA/ {s//&AA/g; =}' filename #第5行未被处理,因此不打印第5行行号
q命令退出
sed '2q' filename #打印前2行后退出