ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Sed和Awk的用法

Sed和Awk的用法

原创 Linux操作系统 作者:pathfinder_cui 时间:2015-09-02 11:01:48 0 删除 编辑
sed初级使用
   stream editor
一次只读一行,只处理一行,不对源文件做处理,至输出到屏幕上
模式空间
是一个行编辑器

格式
   sed[options] "script" FILE....

选项:
   -n:静默模式,不输出模式空间内的内容;默认打印空间模式的内容
   -r:扩展的正则表达式
   -f 文件:指定sed脚本文件
   -e 'script' -e 'script' :指定多个编辑指令
   -i : 直接编辑原文件
编辑命令:
    d:删除
    p: 打印
    i  \:在被指定到的行前面插入文本
    a  \:在被指定的行的下面插入文本
    \n:换行
    r 文件:在指定位置把另外一个文件的内容插入
    w 文件:将符合条件的所有行保存至指定文件中
    =:显示符号条件的行的行号
    s///:查找条件可以使用模式,但是要替换的内容不行

地址定界:自定义的起始行到结束行
  startline,endline
   1,3
   /pat1/,/pat2/
   /pattern/

 用法:sed [options] 'addr1[,addr2]编辑命令' FILE...
       sed [options] "addr1[,addr2]编辑命令" FILE...
练习:
   1)替换/etc/inittab文件中”id:3:initdefault:"一行中的数字为5
    sed 's@\(id:\)[0-9]\(:initdefault\)@\15\2' /etc/inittab         
   2)删除/etc/init.d/funcions文件中的空白行
    sed "/^$/d" /etc/init.d/funcions
   3)删除/etc/inittab文件中位于行首的#;
     sed 's@^#@@g' /etc/inittab    
   4)删除/etc/rc.d/rc.sysinit文件中以#后跟至少一个空白字符开头的行的行首的#和空白字符。
    sed "s@^#[[:space:]]\{1,\}\@@g" /etc/rc.d/rc.sysinit
   5)删除/boot/grub/grub.conf文件中行首的空白字符。
    sed "s@^[[:space:]]\{1,\}@@g" /boot/grub/grub.conf
   6)取出一个文件路径的目录名称,如/etc/sysconfig/network,其目录为/etc/sysconfig,功能类似dirname命令;
   echo /etc/sysconfig/network | sed "s@[^/]\{1,\}/\?$@@"

   sed高级用法:t,T,D,P,N,n,H,h,G,g

awk命令:
   awk:报告生成工具
       把文件中读取带的每一行的每个字段分别进行格式化,而后进行显示:

       支持使用变量、条件判断、循环、数组

  选项:
    -F:切割符
    $0:整行
    $1,$2.....:位置参数


  用法格式:
     awk [options] 'script' FILE...
     awk [options] '/pattern/{action}' FILE...

     action: print $1,$2

     模式:
       地址定界:/pat1/,/pat2/ 一个范围
                /pattern/ 被匹配到的行
                experssion 表达式
                   >,>=,<,<=,==,!=,~(模式匹配)
                 !:取反
        BEGIN:执行前操作
        END:执行后的收尾  操作

  awk的常用四种分隔符:
      输入:
          行分隔符
          字段分隔符
      输出:
          行分隔符
          字段分隔符
 
  awk的内置变量
    NF:最后一个字段
    FS: 指定输入分隔符 在BEGIN中定义,指定时要使用""
    默认为空白
    OFS:输出时指定的分隔符,在BEGIN中定义,指定时要使用"",默认为空白

  练习:
     1.显示GID小于500的组
     awk -F : '$3<500{print $1}' /etc/group
     2.显示默认的shell为nologin的用户
     awk -F : '$7~/nologin$/{print $1}' /etc/passwd
     3,显示eth0网卡文件的配置信息,注意,只显示等号后面的值
     awk -F = '{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0
     4.显示/etc/sysctl。conf文件中定义的内核参数:只显示名称,
     awk -F =' !/^#|^$/{print $1}'/etc/sysctl.conf
     5.显示eth0网卡的ip地址,通过ifconfig命令结果进行过滤
     ifconfig eth0 |awk '/inet addr/{print $2}' |awk -F : '{print $2}'

     如果只显示文本内容,优先显示grep

     awk的高级部分:其他内置变量、用户自定义变量、条件判断、循环、数组、内置函数:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29620572/viewspace-1789233/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-04-21

  • 博文量
    55
  • 访问量
    58133