Linux高级运维命令(sed)

Sed是一个很好的文件处理工具,自己是一个管道命令,主要是以行为单位进行处理,能够将数据行进行替换、删除、新增、选取等特定工做。html

sed命令行格式为:web

sed [-nefri] ‘command’ 输入文本

从第两千行开始逐屏显示

sed -n '2000,$p' fname | less

筛选日志

sed -n '/^2016-06-09/p' catalina.out > 2016-06-09.log
sed -n '/^2016-06-09 13/p' catalina.out > 2016-06-09_13-14.log

经常使用选项

  • -n:使用安静(silent)模式。在通常 sed 的用法中,全部来自 STDIN的资料通常都会被列出到萤幕上。但若是加上 -n 参数后,则只有通过sed 特殊处理的那一行(或者动做)才会被列出来。
  • -e:直接在指令列模式上进行 sed 的动做编辑;
  • -f:直接将 sed 的动做写在一个档案内,-f filename 则能够执行 filename 内的sed 动做;
  • -r:sed 的动做支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
  • -i:直接修改读取的档案内容,而不是由萤幕输出

经常使用命令

  • a:新增, a 的后面能够接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c:取代, c 的后面能够接字串,这些字串能够取代 n1,n2 之间的行!
  • d:删除,由于是删除啊,因此 d 后面一般不接任何咚咚;
  • i:插入, i 的后面能够接字串,而这些字串会在新的一行出现(目前的上一行);
  • p:列印,亦即将某个选择的资料印出。一般 p 会与参数 sed -n 一块儿运做~
  • s:替换,能够直接进行取代的工做哩!一般这个 s 的动做能够搭配正规表示法!例如 1,20s/old/new/g 就是啦!

删除指定行

删除第一行正则表达式

`sed '1d' fname`

删除最后一行ruby

`sed '$d' fname`

删除第一行到第二行less

`sed '1,2d' fname`

删除第二行到最后一行svg

`sed '2,$d' fname`

显示指定行

显示第一行工具

sed -n '1p' fname

显示最后一行命令行

sed -n '$p' fname

显示第一行到第二行日志

sed -n '1,2p' fname

显示第二行到最后一行code

sed -n '2,$p' fname

匹配查询(搜索)

查询包括关键字ruby所在全部行

sed -n '/ruby/p' fname

查询包括关键字$所在全部行,使用反斜线\屏蔽特殊含义

sed -n '/\$/p' fname

增长一行或多行字符串cat fname

Hello!
ruby is me,welcome to my blog.
end

第一行后增长字符串"drink tea"

sed '1a drink tea' fname
Hello!
drink tea
ruby is me,welcome to my blog.
end

第一行到第三行后增长字符串"drink tea"

sed '1,3a drink tea' fname
Hello!
drink tea
ruby is me,welcome to my blog.
drink tea
end
drink tea

第一行后增长多行,使用换行符\n

sed '1a drink tea\nor coffee' fname
Hello!
drink tea
or coffee
ruby is me,welcome to my blog.
end

替换行

第一行代替为Hised '1c Hi' fname

Hi
ruby is me,welcome to my blog.
end

第一行到第二行代替为Hi

sed '1,2c Hi' fname
Hi
end

批定行替换

要替换的字符串能够用正则表达式

sed 's/源字符串/目标字符串/g'

替换ruby为bird

sed -n '/ruby/p' fname | sed 's/ruby/bird/g'

删除ruby

sed -n '/ruby/p' fname | sed 's/ruby//g'

插入

`sed -i '$a bye' fname`在文件fname中最后一行直接输入"bye"

cat fname

Hello!
ruby is me,welcome to my blog.
end
bye

删除行

sed -i '/匹配字符串/d'  filename

替换匹配行中的某个字符串

`sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename`