sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed的选项、命令、替换标记

命令格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

常用选项:

    -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。

常用命令:

a ∶新增, a 的后面可以接字符串,而这些字符串会在目前的下一行出现。
c ∶取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行。
d ∶删除,后面不接任何东西;
i ∶插入, 与a只有一点不同,增加的字符串会在目前的上一行出现;
p ∶列印,亦即将某个选择的资料印出。在使用p的时候一般会加上-n参数。
s ∶取代,可以直接进行取代的工作。

  

基本用法

  • d∶删除,后面不接任何东西;
删除某行

$ sed '1d' filename               删除第一行 

$ sed '$ d' filename              删除最后一行

$ sed '1,2d' filename            删除第一行到第二行

$ sed '2,$ d' filename           删除第二行到最后一行
  • p∶列印,亦即将某个选择的资料印出。在使用p的时候一般会加上-n参数。
显示某行

$ sed -n '1p' filename           显示第一行 

$ sed -n '$ p' filename           显示最后一行

$ sed -n '1,2p' filename        显示第一行到第二行

$ sed -n '2,$ p' filename        显示第二行到最后一行

使用模式进行查询

$ sed -n '/world/p' filename    查询包括关键字world所在所有行

$ sed -n '/\$ /p' filename        查询包括关键字$ 所在所有行,使用反斜线\屏蔽特殊含义
  • a∶新增, a 的后面可以接字符串,而这些字符串会在目前的下一行出现。
  • i ∶插入, 与a只有一点不同,增加的字符串会在目前的上一行出现;
[root@localhost ~]# cat filename
Hello!
world!
end
[root@localhost ~]# sed '1a people' filename 第一行后增加字符串"people"
Hello!
people
world!
end
[root@localhost ~]# sed '1,3a people' filename 第一行到第三行后增加字符串"people"
Hello!
people
world!
people
end
people
[root@localhost ~]# sed '1i people\nperson' filename 第一行前增加多行,使用换行符\n
people
person
Hello!
world!
end
  • c∶取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行。
[root@localhost ~]# cat filename
Hello!
world!
end
[root@localhost ~]# sed '1c Hi' filename
Hi
world!
end
[root@localhost ~]# sed '1,2c Hi' filename
Hi
end
  • s ∶取代,可以直接进行取代的工作。
格式:sed 's/要替换的字符串/新的字符串/g'   修改的文件
[root@localhost ~]# cat filename
Hello!
world!
end
[root@localhost ~]# sed -i 's/Hello!/start/g' filename 把Hello!替换为start
[root@localhost ~]# cat filename
start
world!
end [root@localhost ~]# cat filename
start
world!
end
[root@localhost ~]# sed -i '$a bye' filename 在最后一行后面新加bye($代表最后一样,a表示在当前行下一面添加,bye是新加内容,中间有没有空格都行)
[root@localhost ~]# cat filename
start
world!
end
bye

  

awk

  awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。 awk 是三剑客的老大,利剑出鞘,必会不同凡响。

1、首先我们看一下常用的cut命令的基本使用方法,cut英文意思是切,它的功能和和awk基本相同,唯一不同的是awk可以说是cut的plus版本(但不是一个厂家)。

cut -d(指定以什么为分割符) -f(指定列)   第一列
#cut -d ‘ ’ -f 5

cut无法切割以空格为分割符的数据。

2、awk的基本常用写法

awk  ‘条件一{动作一}条件二{动作二} ’  文件
当然我们也可用使用管道符|awk。。。。。

3、awk的基本写法

#我们使用printf的话最后必须要加上\n换号符号,$数字是表示第几列
df -h | awk '{printf $1 "\t" $5 "\n"}'
#如果使用print的话就不需要再多写一个\n了
df -h | awk '{print $1 "\t" $5}'
#注意,为了不想让两行数据黏在一起,所以中间需要用“\t”空格符隔开。最外面的必须是单引号,而里面的\t和\n必须使用双引号。

4、实例

  我们想试试判断linux的根分区的使用情况,或者是某个分区的使用情况,我们怎么判断呢。

#df -h | grep sda3 | awk '{print $5}' | cut -d '%' -f 1
解释:
df -h | grep sda3是我的根分区,awk抓取第五列,也就是拿到6%这个数字,但是不想要百分号,那我们在用cut切一下,就OK了

5、BEGIN(实际上就是在打印结果的开始打印里面动作的一句话)

#df -h | grep sda3 | awk 'BEGIN{print "This is the use of the root partition"}{print $5}' | cut -d '%' -f 1

BEGIN的关键用法。

#awk '{FS=":"}{print $1 "\t" $3}' /etc/passwd

#awk 'BEGIN{FS=":"}{print $1 "\t" $3}' /etc/passwd

关键:我们知道awk是每次提取的时候都是先读取第一行后,才开始执行后面的动作语句,所以第一行没有被处理。这个时候就需要使用BEGIN,这个时候它就会处理所有数据。

END的用法

有BEGIN当然就有END了

#awk 'END{print"END!!!"}{print $1 "\t" $3}' /etc/passwd
#和BEGIN的用法基本相同,只不过是在处理数据动作的最后加打印而已。

6、关系运算符

关系运算符
> 大于
< 小于
= 等于 #这里的等于就把结果都改成这等于后面的数值,如下图
>= 大于等于
<= 小于等于 

centos7之sed和awk常用的更多相关文章

  1. Shell常用工具find,grep,sed,awk,xargs命令

    最近学习shell命令,对grep,sed,awk命令有点混乱,故小结一下,巩固一遍. 注意:find , grep , sed, awk可使用基本正则表达式字符,find,grep,awk也支持扩展 ...

  2. sed和awk的常用实例

    一.文本间隔 1.在每一行后面增加一空行 sed G guo.sh awk '{printf("%s\n\n",$0 ) }' 2.将文件中原来的空行删掉,并在在每一行后边增加一空 ...

  3. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  4. Linux系统编程(19)——正则表达式在sed和awk中的使用

    sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出.sed和 ...

  5. linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

    本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ...

  6. sed、awk——运维必须掌握的两个工具

    今天主要跟大家介绍2个非常霸道的工具,sed和awk,本篇文章将介绍这两个工具在日常运维中的常用用法,工作中这两个工具要掌握好了在结合一些管道命令.正则表达式,日常处理事务简直666啦! l Sed ...

  7. sed和awk用法

    sed和awk用法 Sed sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为 ...

  8. Linux文本三剑客超详细教程---grep、sed、awk

    awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...

  9. shell编程基础(七): 处理文件命令sed与awk

    一.sed(以行为单位处理文件) sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑 ...

随机推荐

  1. linux系统管理--top命令

    这些日子,运维公司三台服务器,一个小伙伴貌似对top命令不太感冒,我告诉他去百度(不懂谷歌百度的程序员不是好厨师),然后突然发现也许我自己该整理一下相关的东西了 top命令是Linux下常用的性能分析 ...

  2. ejs常用语法

    nodejs的模板引擎有很多, ejs是比较简单和容易上手的.常用的一些语法: 用<%...%>包含js代码 用<%=...%>输出变量 变量若包含 '<' '>' ...

  3. 一对多Excel自定义函数:SVLOOKUP

    语法规则 该函数的语法规则如下: SVLOOKUP(lookup_value,table_array,col_index_num,nth_appearance,unique_value) 参数 简单说 ...

  4. ionic3 导航的应用(页面跳转与参数传递)

    about.html(跳转页面) <ion-content padding> <ion-list> <ion-item *ngFor="let he of co ...

  5. (办公)面试java设计模式

      1.单例模式: 程序开发的时候,有些对象只能有一个.有实例,且只有一个,比如工具类. 修改构造方法为私有的. 饿汉模式: 线程安全 创建一个实例 Private Static 实例; 提供一个静态 ...

  6. axios与ajax区别

    1.jQuery ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...

  7. Hibernate从入门到了解

    目录 Hibernate的介绍与执行流程 运行流程: Hibernate运行环境搭建 Hibernate的基础示例 持久类的编写 持久类的介绍 几个考虑遵守的规则: 补充: Hibernate核心文件 ...

  8. 从0开始的Python学习004小的总结与补充

    没有时间?快速阅读: Python确实是一种十分精彩又强大的语言. Python是程序.脚本或者软件 python helloworld.py运行你的Python help()帮助你的Python 命 ...

  9. 我认知的javascript之作用域和闭包

    说到javascript,就不得不说javascript的作用域和闭包:当然,还是那句老话,javascript在网上都说得很透彻了,我也就不过多的强调了: 作用域:javascript并没有像其他的 ...

  10. 我认知的javascript之函数调用

    今天刚好周六没事,又由于工作的原因导致早上醒来就睡不着,无聊之下,就想到了 js 的function调用问题.当然,网上也是对javascript的一些事情说得很透了,但我觉得还是有必要把自己的想法说 ...