A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  一.sed简介:
  1.SED(stream editor)是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。
  2.sed 编辑器逐行处理文件(或输入),并将输出结果发送到屏幕。 sed 的命令就是在 vi和 ed/ex 编辑器中见到的那些。 sed 把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲。sed 处理完模式空间中的行后(即在该行上执行 sed 命令后),就把改行发送到屏幕上(除非之前有命令删除这一行或取消打印操作)。 sed 每处理完输入文件的最后一行后, sed 便结束运行。 sed 把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改或破坏源文件。
  二.sed的相关参数:
  格式:sed + [参数] + ‘命令’ + file
  p ##打印显示模板块的行
  d ##删除指定行
  a ##在指定行的下一行添加文本
  c ##替换指定行文本
  i ##在指定行的上一行插入文本
  三.sed的简单命令:
  1. 参数p:
  (1).sed -n ‘/:/p’ /etc/fstab ##显示含有:号的行*(此处需要用来进行转转义)**
    (2).sed -n ‘/^#/p’ /etc/fstab ##显示#号开头的行
    (3).sed -n ‘/^#/!p’ /etc/fstab ##显示非#号开头的行
    (4).sed -n ‘2,6p’ /etc/fstab ##显示2到6行
    (5).sed -n ‘2,6!p’ /etc/fstab ##显示其他行除过2到6行
    2.参数d:
  (1).sed ‘/^UUID/d’ /etc/fstab ##删除以UUID开头的行
    (2).sed ‘/^#/d’ /etc/fstab ##删除以#号开头的行
    (3).sed ‘/^$/d’ /etc/fstab ##删除空行
    (4).sed ‘1,4d’ /etc/fstab ##删除1到4行
    3.参数a与s:
  (1).sed ‘/hello/aworld’ westos ##在原文本hello下一行添加world文本
    (2).sed ‘s/hello/hello world/g’ westos ##替换hello为hello world
    (3).sed ‘s/hello/helloworld/g’ westos ##添加world在hello下一行
    4.参数c:
  (1).sed ‘/hello/chello world’ westos ##将hello替换成hello yangyang
    5.参数i:
  (1).sed ‘/hello/iworldwestos’ westos
    6. -i:
  (1).sed -i ‘s/world/yang/’ redhat ##将world替换成yang
  (2).sed -i ‘s/world/yang/g’ redhat ##全局替换
    ######awk######
  一.awk简介:
  1.AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )
  2.AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
  3.最简单地说, AWK 是一种用于处理文本的编程语言工具。AWK 在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法。它的设计思想来源于 SNOBOL4 、sed 、Marc Rochkind设计的有效性语言、语言工具 yacc 和 lex ,当然还从 C 语言中获取了一些优秀的思想。在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
  二.awk报告生成器:
  1.awk处理机制:根据模式一次从文件中抽取一行文本,对这行文本进行切片(默认使用空白字符作为分隔符)
  2.awk ‘{print $0}’ test ##表示输出一整行
  awk ‘{print $2}’ test ##表示输出第二个字段
  awk ‘{print $4}’ test ##显示第四个字段
  awk ‘{print $1,$2}’ test ##显示第一和第三个字段
    3.awk -F “:” ‘{print $1,$3}’ /etc/passwd ##指定:为分隔符,显示一三字段
       三.常用变量:
  1.NR(行)与NF(列):
  (1).awk ‘{print FILENAME,NR}’ /etc/passwd ##输出文件名,和当前操作的行号
    (2).awk -F: ‘{print NR,NF}’ /etc/passwd ##输出每次处理的行号,以及当前以":"为分隔符的字段个数
    (3). 输出以bash结尾的行
    (4).awk -F: ‘NR==2 {print}’ /etc/passwd ##输出指定文件第二行
    (5).awk -F: ‘NR % 2 == 0 {print}’ /etc/passwd ##输出偶数行
    (6).awk -F: ‘NR % 2 == 1 {print}’ /etc/passwd ##输出奇数行
    (7).awk -F: ‘NR >=3 && NR <=5 {print }’ /etc/passwd ##输出3到5行,包括第3和第5行
    总结:awk ‘{print “第NR行”,“有NF列”}’ /etc/passwd ##输出第几行第几列
  2.BEGIN与END:
  BEGIN{}:读入第一行文本之前执行的语句,一般用来初始化操作
  {}:逐行处理
  END{}:处理完最后以行文本后执行,一般用来处理输出结果
  (1).awk -F: ‘BEGIN{print “REDHAT”} {print NR;print } END {print “WESTOS”}’ passwd ##文件开头加REDHAT,末尾加WESTOS,打印行号和内容
    (2).awk ‘BEGIN{i=0}{i+=NF}END{print i}’ linux.txt ##统计文本总字段个数
    三.awk命令的高级应用(与if,for语句的结合):
  1. if单分支语句:统计登录shell为bash的用户
    2.if双分支语句:统计uid小于等于500和大于500的用户个数
    3.for循环
  

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马