【linxu编程】Linux文本处理三剑客——sed 2

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行后退出


你可能感兴趣的:(【linxu编程】Linux文本处理三剑客——sed 2)