shell脚本-sed命令

sed命令--流编辑器

1.工作原理

  指定一个文本文件,依次读取文本文件中每一行的内容,读取到模式空间(pattern space)中,在模式空间中进行文本匹配(使用正则表达式),对匹配后的内容进行修改(替换、删除、打印、修改和保存)

2.常见选项

  -r 指定使用扩展正则表达式
    -n 禁止自动打印到空间模式
    -e 接脚本语句
    -f 指定脚本文件
    -l 指定文本换行的长度
    -i 直接修改文件内容(需要慎重使用) 

3.地址定界

(1)直接匹配数值
     示例:sed -n '5p' 文件名        #打印文件中内容的第五行
(2)d~ 步长       
     示例:sed -n '1~3p' 文件名    #打印文件中内容从第1行开始以3为步长打印,就是打印第1,4,7,11.....行

  扩展:sed -n '1p;3p' 文件名   #打印文件内容中的第一行和第三行

(3)$  指定行尾
     示例:sed -n '10,$p' 文件名     #打印文件内容从第10行到最后一行
(4)/正则/
    /正则1/,/正则2/
    示例:sed -n '/k\{5,\}/,$p' 文件名  #打印文件中匹配k这个字符至少5次的字符并输出

(5)0,addr
   addr 可以为 数字/$/正则表达式
   示例:sed -n '0,/k\{5,\}/p' abc    

(6)addr,+N    
    配置addr行到,addr后N行
    示例:sed -n '/fd/,+5p' abc
4.常见命令

扫描二维码关注公众号,回复: 7070527 查看本文章

 p  print 打印(默认在屏幕上显示出来)建议和-n一起使用
    i   在匹配的上一行去添加指定内容
        示例:sed"/aaa/i\abc" 文件
   a  在匹配行的下一行指定添加内容
       示例:sed"/aaa/a\abc" 文件    
   c 替换行
      示例:sed "/aaaa/c \A"文件
   d 删除
      示例:sed "/aaa/d" 文件
                 sed "1,3d" 文件
  n 读取/N添加 模式匹配到的行的下一行内容,在对其进行操作
  w 保存文件内容到一个新的文件
     示例:sed "/pattren/w 新文件" 原来文件
               sed "/k/w /tmp/pattern" abc
  s 文本内容替换,默认替换模式空间匹配到的第一项
     语法格式:s/pattern/字符串/
     中间/可以替换为任意一个特殊字符,例如:s###s%%%
     g---行内全局替换
     \1\2 和正则表达式分组相同,实现反向应用;指定某一个匹配项进行修改替换
     &---调用前面(pattern)匹配的内容
     示例:sed "s/r..t/&er/g" 文件

5.练习

   (1)删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;
        sed 's/^[[:space:]]\+//g' /boot/grub/grub.conf 

   (2) 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行   的行首的#和空白字符;
        sed 's/^#[[:space:]]\+//g' /etc/fstab

   (3)给定一个目录,取出其目录名
        echo "/etc/passwd"  |  sed 's/[^/]\+$//'

   (4)给定一个目录,取出其文件名
        echo "/etc/passwd" | sed 's#^/.*/\(.*\)##

猜你喜欢

转载自www.cnblogs.com/hmm01031007/p/11390805.html