Linux中 sed 和 awk的用法详解

2019-09-23 09:05:27王振洲

  使用模式进行查询

[root@localhost ruby] # sed -n '/ruby/p' ab  #查询包括关键字ruby所在所有行
   [root@localhost ruby] # sed -n '/$/p' ab    #查询包括关键字$所在所有行,使用反斜线屏蔽特殊含义

  增加一行或多行字符串

 [root@localhost ruby]# cat ab
   Hello!
   ruby is me,welcome to my blog.
   end
   [root@localhost ruby] # sed '1a drink tea' ab #第一行后增加字符串"drink tea"
   Hello!
   drink tea
   ruby is me,welcome to my blog. 
   end
   [root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
   Hello!
   drink tea
   ruby is me,welcome to my blog.
   drink tea
   end
   drink tea
   [root@localhost ruby] # sed '1a drink teanor coffee' ab  #第一行后增加多行,使用换行符n
   Hello!
   drink tea
   or coffee
   ruby is me,welcome to my blog.
   end

  代替一行或多行

 [root@localhost ruby] # sed '1c Hi' ab        #第一行代替为Hi
   Hi
   ruby is me,welcome to my blog.
   end
   [root@localhost ruby] # sed '1,2c Hi' ab       #第一行到第二行代替为Hi
   Hi
   end

  替换一行中的某部分

  格式:sed 's/要替换的字符串/新的字符串/g'   (要替换的字符串可以用正则表达式)

 [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g'  #替换ruby为bird
  [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g'    #删除ruby

     插入

 [root@localhost ruby] # sed -i '$a bye' ab     #在文件ab中最后一行直接输入"bye"
   [root@localhost ruby]# cat ab
   Hello!
   ruby is me,welcome to my blog.
   end
   bye

     删除匹配行

      sed -i '/匹配字符串/d'  filename  (注:若匹配字符串是变量,则需要“”,而不是‘'。记得好像是)

      替换匹配行中的某个字符串

      sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename

Linux awk的用法 

简介 

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

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