sed

       sed:stream editor 流编辑器,由于sed按行进行处理所以也称为行编辑器,是shell脚本中的一个利器。
       sed的特点:
1、非交互式编辑器,只需输入命令,sed就会将执行结果显示出来。
2、没有破坏性:将文件的内容读到sed自己的内存空间里然后执行sed的处理命令,只对原文件进行读取并不修改(除非使用特定命令)。
3、sed本身支持sed脚本。
sed的命令格式:
1、指定一个模式:sed [options] /PATEERN/CONMMADN files //中填写sed匹配的字符串  指定一个固定的搜索字符串
2、指定一个范围:sed [options] ADDR1,ADDR2 CONMMADN files 指定一个搜索范围
当匹配命令为正则表达式的时候需要对匹配命令添加''或""。
sed的命令:
1、sed [options]格式命                                                                                                              sed -p 显示出执行结果(默认为输出所有的内容,匹配的行输出两遍)
   -n 只输出匹配模式的内容
   -d 删除匹配的行
   -i  可以直接修改源文件(慎用!!)
   -f 将sed命令写成脚本
2、在匹配命令里执行的命令:
a\:作用是在匹配的行后插入内容
i\:作用是在匹配的行前插入内容
p:输出sed执行过的结果
s:替换:将匹配的内容换成指定内容 sed  "addr1,addr2/搜索的内容/替换的内容/" 注意替换的内容不能为正则表达式,其中“/”只是一个标识符可以换成任意相同的字符。
&:保存查找字符串以便在替换中引用。
看实例:
sed -n /cache/,/wp/p /proc/cpuinfo只输出文件中出现在cache到wp这两个字符中间的内容
sed "/^processor/a\#this is my cpu"  /proc/cpuinfo  a\作用是在以processor开头的行后插入内容#this is my cpu
sed "/^processor/a\#this is my cpu"  /proc/cpuinfo  i\作用是在以processor开头的行前插入内容#this is my cpu
sed "/^processor/a\#this is my cpu"  /proc/cpuinfo \nsdfsf\nwerere"  /proc/cpuinfo \n换行,用来添加多行内容
sed '1,$s/yes/YES/g' /proc/cpuinfo  把从第一行到最后一行中的yes替换成YES ,$表示最后一行  s是用来替换的 g表示覆盖原来sed空间内的内容
sed '1,$s/\b[Cc]pu\&s/g' /proc/cpuinfo  查找所有行将单词cpu替换成cpus。
sed '1,s/\b[Cc]pu\&s/g' -e '1,$s/\(\bm[[:alpha:]_]*\b/)/\1s’ 把以cpu换成cpus,把以m开头的单词加上个字母s


sed 练习
写一个脚本
将/var/目录下的所有文件的文件名的首字母和尾字母显示时改为大写
#!bin/bsah
#
   cd /var
  for i in ./*;do
  FLETTER=`sed '1,$s/\([a-zA-Z])\.*\1/g' | tr 'a-z' 'A-Z'`
         `sed '1,$s/.*\([a-zA-Z])\\1/g' | tr 'a-z' 'A-Z'`
1、将/etc/passwd文件中以n开头的多有单词首字母改成大写
       sed '1$s/\bn([[:alpha:]]*#)/N'  /etc/passwd
2、在/proc/meminfo文件中所有以HugePages开头的行添加#For performancing
3、删除/etc/inittab文件中所有以#开头,或者以一些空白字符后跟一个#开头的行,并且将所有以一个空格后跟开一个数字结尾的行中的那个行尾的数字改成0.
  sed '/^[[:space:]]*#/d' /etc/inittab  
  sed '1$s/ [0-9]$'/ 0/g etc/inittab  ( 匹配中的d意味只删除匹配的项,而不删除整行)