Shell中的sed和awk的用法

######sed######
一.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/hello\nworld/g’ westos ##添加world在hello下一行
在这里插入图片描述
4.参数c:
(1).sed ‘/hello/chello world’ westos ##将hello替换成hello yangyang
在这里插入图片描述
5.参数i:
(1).sed ‘/hello/iworld\nwestos’ 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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值