Shell中的sed和awk的用法

  • Post author:
  • Post category:其他




######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循环


在这里插入图片描述



版权声明:本文为y_yang666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。