Linux中sed命令同awk命令有什么区别呢?具体该如何使用呢?

2021-01-18 17:44发布

2条回答
是你的小甜心呀
2楼 · 2021-01-19 10:19

一 Sed命令

Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法:sed [参数] [范围] [操作] [文本文件]
(1)选项:
-e :直接在命令行模式上进行sed动作编辑,此为默认选项;

-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;

-i :直接修改文件内容;

-n :只打印模式匹配的行;

-r :支持扩展表达式;

-h或–help:显示帮助;

-V或–version:显示版本信息。
(2)sed命令功能
命令 功能
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行

c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用""续行

i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用""续行

d 删除行

h 把模式空间里的内容复制到暂存缓冲区

H 把模式空间里的内容追加到暂存缓冲区

g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容

G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面

l 列出非打印字符

p 打印行

n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理

q 结束或退出sed

r 从文件中读取输入行

! 对所选行以外的所有行应用命令

s 用一个字符串替换另一个

g 在行内进行全局替换

w 将所选的行写入文件

x 交换暂存缓冲区与模式空间的内容

y 将字符替换为另一字符(不能对正则表达式使用y命令)

(3)常用的命令展示
N1:只打印第三行
在这里插入图片描述
N2:打印3到9行
在这里插入图片描述
N3:用world 替换data.log文件中的root【真实写入】

在这里插入图片描述
N4: data.log文件1到2行替换world为root在这里插入图片描述
N5 :查询data.log文件有root字符串所在的行
在这里插入图片描述
N6:在文件第一行和第3行的每行下面添加gegege
在这里插入图片描述

N7:删除文件1到4行
(加上-i才是真实删掉,不加只是回显显示)
在这里插入图片描述

二 AWK命令

(1) 什么是awk
我们先来用专业的术语描述一下awk是什么,如果你看不懂,没关系,我们会再用"大白话"解释一遍。
awk是一个报告生成器,它拥有强大的文本格式化的能力,这就是专业的说法。
你可能不理解所谓的报告生成器中的"报告"是什么,你可以把"报告"理解为"报表"或者"表格",也就是说,我们可以利用awk命令,将一些文本整理成我们想要的样子,比如把一些文本整理成"表"的样子,然后再展示出来,刚才概念中提到的"文本格式化的能力",也就是这个意思.
awk是由Alfred Aho 、Peter Weinberger 和 Brian Kernighan这三个人创造的,awk由这个三个人的姓氏的首个字母组成。

awk早期是在unix上实现的,所以,我们现在在linux的所使用的awk其实是gawk,也就是GNU awk,简称为gawk,awk还有一个版本,New awk,简称为nawk,但是linux中最常用的还是gawk。

awk从放弃到入门(1):awk基础 (通俗易懂,快进来看)

awk其实是一门编程语言,它支持条件判断、数组、循环等功能。所以,我们也可以把awk理解成一个脚本语言解释器。

(2) grep 、sed、awk被称为linux中的"三剑客"。

我们总结一下这三个"剑客"的特长。

grep 更适合单纯的查找或匹配文本

sed 更适合编辑匹配到的文本

awk 更适合格式化文本,对文本进行较复杂格式处理

(3) awk基础
awk基本语法如下,。

awk [options] ‘program’ file1 , file2 , ```

对于上述语法中的program来说,又可以细分成pattern和action,也就是说,awk的基本语法如下

awk [options] ‘Pattern{Action}’ file

从字面上理解 ,action指的就是动作,awk擅长文本格式化,并且将格式化以后的文本输出,所以awk最常用的动作就是print和printf,因为awk要把格式化完成后的文本输出啊,所以,这两个动作最常用。

我们先从最简单用法开始了解awk,我们先不使用[options] ,也不指定pattern,直接使用最简单的action,从而开始认识awk,示例如下
N1:awk ‘{print}’ 1.log
在这里插入图片描述
上图中,我们只是使用awk执行了一个打印的动作,将文件中的内容打印了出来。
N2:打印某列
在这里插入图片描述
上图中的示例没有使用到options和pattern,上图中的awk ‘{print $5}’,表示输出df的信息的第5列,$5表示将当前行按照分隔符分割后的第5列,不指定分隔符时,默认使用空格作为分隔符,细心的你一定发现了,上述信息用的空格不止有一个,而是有连续多个空格,awk自动将连续的空格理解为一个分割符了,是不是比cut命令要简单很多,这样比较简单的例子,有利于我们开始了解awk。

awk是逐行处理的,逐行处理的意思就是说,当awk处理一个文本时,会一行一行进行处理,处理完当前行,再处理下一行,awk默认以"换行符"为标记,识别每一行,也就是说,awk跟我们人类一样,每次遇到"回车换行",就认为是当前行的结束,新的一行的开始,awk会按照用户指定的分割符去分割当前行,如果没有指定分割符,默认使用空格作为分隔符。

N3:我们也可以一次输出多列,使用逗号隔开要输出的多个列,如下,一次性输出第一列和第二列
在这里插入图片描述
N4:除了输出文本中的列,我们还能够添加自己的字段,将自己的字段与文件中的列结合起来,如下做法,都是可以的。
在这里插入图片描述
是要注意,$1这种内置变量的外侧不能加入双引号,否则$1会被当做文本输出
N5:我们说过,awk的语法如下

awk [options] ‘Pattern{Action}’ file

而且我们说过awk是逐行处理的, 刚才已经说过了最常用的Action:print

现在,我们来认识下一Pattern,也就是我们所说的模式

不过,我们准备先把awk中最特殊的模式展示给大家,以后再介绍普通的模式,因为普通模式需要的篇幅比较长,所以我们先来总结特殊模式。

AWK 包含两种特殊的模式:BEGIN 和 END。

BEGIN 模式指定了处理文本之前需要执行的操作:

END 模式指定了处理完所有行之后所需要执行的操作:

什么意思呢?光说不练不容易理解,我们来看一些小例子,先从BEGIN模式开始,示例如下
在这里插入图片描述
述写法表示,在开始处理test文件中的文本之前,先执行打印动作,输出的内容为"aaa",“bbb”.

也就是说,上述示例中,虽然指定了test文件作为输入源,但是在开始处理test文本之前,需要先执行BEGIN模式指定的"打印"操作

既然还没有开始逐行处理test文件中的文本,那么是不是根本就不需要指定test文件呢,我们来试试。
在这里插入图片描述
经过实验发现,还真是,我们并没有给定任何输入来源,awk就直接输出信息了,因为,BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作,而上述示例没有给定任何输入源,但是awk还是会先执行BEGIN模式指定的"打印"动作,打印完成后,发现并没有文本可以处理,于是就只完成了"打印 aaa bbb"的操作。

这个时候,如果我们想要awk先执行BEGIN模式指定的动作,再根据执我们自定义的动作去操作文本,该怎么办呢?示例如下
在这里插入图片描述
上图中,蓝色标注的部分表示BEGIN模式指定的动作,这部分动作需要在处理指定的文本之前执行,所以,上图中先打印出了"aaa bbb",当BEGIN模式对应的动作完成后,在使用后面的动作处理对应的文本,即打印test文件中的第一列与第二列,这样解释应该比较清楚了吧。

看完上述示例,似乎更加容易理解BEGIN模式是什么意思了,BEGIN模式的作用就是,在开始逐行处理文本之前,先执行BEGIN模式所指定的动作。以此类推,END模式的作用就一目了然了,举例如下。
在这里插入图片描述
N6:那么,我们可以结合BEGIN模式和END模式一起使用。示例如下
在这里插入图片描述
上述示例中返回的结果有没有很像一张"报表",有"表头" 、“表内容”、 “表尾”,awk对文本的格式化能力你体会到了吗?


我是大脸猫
3楼 · 2021-01-19 16:41

awk命令:
awk比较倾向于将一行分成数个字段来处理,所以是比较适合处理小型数据处理。
awk ‘条件类型 1{动作 1} 条件类型 2{动作 2} …’ filename
1、例如我要取出我的centos7的mac地址:

使用命令:

2、我要取出登录账号 和 登录ip 并且两者之间使用【tab】分开


3、我们知道/etc/passwd 中的内容是以:来分割字段的,该文件中的第一个字段是账号,第三个字段是uid,那么我们要查阅第三列小于10以下的数据的时候,就可以这样做


上面的这个BEGIN就可以预先设置awk的变量,表示以:分割从第一行就开始

awk的好多动作都在单引号’’中,如果使用多个命令的时候就可以使用;或者直接按Enter

Sed命令:
Sed命令本身就是一个管道命令
1、sed ‘s/要被替换的字符串/新的字符串/g’ 【注意如果字符串里面要用变量的话,单引号可以使用双引号””来代替,这时就可以识别 $var 了】,在这里也可以使用正则匹配。
注意:在这里也可以直接修改文件内容 sed -i ‘s/要被替换的字符串/新的字符串/g’ 文件名
2、将 /etc/passwd的内容列出来并打印行号,同时删除2-50行
在第二行后面加上 lixiaoliang


3、将/etc/passwd 的2-4行内容替换成 kji-time!!!!!!!!!!

在这里命令中2,4c是2-4行,还有2,$就是2到最后一行。
4、列出/etc/passwd的5-7行
这里写图片描述
这里的这个-n就是安静模式,如果没有-n这个参数就是5-7行重复输出


相关问题推荐

  • 回答 19
    已采纳

    软件测试最主要的目的,是为了保证软件上线以后,能够正常平稳没有bug的运行下去,因为测试的本质就是找应用程序和需求规格说明书之间的不同,如果两者发现不一致了,那一定是出现问题了。而通过软件测试工作,能够帮助甲方人员更好的接受软件提供依据,也让...

  • 回答 10

    简单地说,测试点就是一个安装了网络速度测试程序的网站或服务器,供其它网友测试从其它地方连接到该网站或服务器的速度。比如,您有一个网站,您在网站中安装了我们免费为您提供的网络速度测试程序,经本站技术人员审核合乎要求,您的网站就成为本站测试联盟...

  • 回答 4

    果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件涉及的各种组合情况。因果图法一般和判定表结合使用,通过映射同...

  • 回答 10

       采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。

  • 回答 7
    已采纳

    在编程中,布尔量指一个真或假状态。通常它们分别用0,1或1,-1来表示,这和编程语言有关。具体来说当布尔量为真的时候表示一个表达式或判断成立,否则这个式子或判断不成立。你把它理解为成立或不成立就行了。...

  • 回答 6
    已采纳

     功能测试框架一般情况就是包含以下几类:界面友好性测试、功能测试、页面链接测试、容错测试、稳定性测试、 性能测试(简单方面)等等。   1.1.1 界面友好性测试  风格、样式的协调性是否合理  界面布局是否整齐,尽量不要使用滚动条  界面操作、...

  • 回答 6

    测试用例:为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。测试脚本是为了进行自动化测试而编写的脚本。两者的关系: 测试脚本的编写必须对应相应的测试用例...

  • 回答 6

    功能点:能够单独完成的某个具体业务流程。 一般在软件测试工作流程中的需求分析阶段,要根据需求说明书或者原型图提取功能点,功能点是和需求点相对应的。例如:每个软件都有注册登录,注册、登录就是两个功能点。登录模块还可以细化成登录功能,忘记密码功...

  • 回答 7
    已采纳

    一、一定要提交。1. 记得有这么个缺陷,以后再遇到的时候可能就会了解发生的原因。2. 尽力去查找出错的原因,比如有什么特别的操作,或者一些操作环境等。3. 程序员对程序比测试人员熟悉的多,也许你提交了,即使无法重新,程序员也会了解问题所在。4. 无...

  • 回答 5

    1、如果你的自学能力较弱,就找个靠谱的培训机构学习,培训机构的功能很简单:公司需要什么,机构就培训什么。针对市场,公司用人也舒服,求职者找工作也好找。2、如果你自学能力强就找些专业教材,结合网上的资料来学习。但是需要你有坚持的毅力。3、测试分...

  • 回答 5

    判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确....

  • 回答 5

    判定表通常有以下四个部分组成:1)条件桩(Condition Stub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要。2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。3)条件项(Condition Entry):列出针对它左列...

  • 回答 6

    、 黑盒测试:是一种常用的软件测试方法,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试。几种常用的黑盒测试方法和黑盒测试工具有,等价类划分法、边界值分析法、因果图法、决策表法。在实际运用中要选择合适的方法。二、 因果...

  • 回答 3

    长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是...

  • 回答 2

    1) 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。2) 边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

没有解决我的问题,去提问