`
234390216
  • 浏览: 10237895 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462837
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775912
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398690
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395130
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680144
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531108
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184883
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468679
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151478
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68321
社区版块
存档分类
最新评论

sed和awk简介

阅读更多

Sed简介

sed [-nefr] 动作:该指令可以将输入的数据进行处理后输出到标准输出,利用sed处理后的结果不会影响到原输入流,比如sed '1,5d' filePath将会把文件filePath的第15行删除后再进行标准输出,但是这不会影响到文件filePath,处理可以是取代、删除、插入等。

   参数:

      -n:表示使用安静模式,sed默认会将处理后的所有行都打印出来,加上参数-n后就只有经过处理的行才会显示出来。

      例如:

      sed -n '1,5p' filePath,该指令将会只打印出filePath这个输入的15行,而没有加-n的话会先在输出filePath15行之后再把整个filePath内容都输出。

      -e:后面接动作,当后面只有一个动作的时候可以把-e省略。

      例如:

      1.sed -e '1,5d' filePath,该指令表示将filePath的第15行删除后再进行输出,因为sed后只进行了一个动作,所以-e参数也可以省略变成sed '1,5d' filePath

      2.sed -e '1,5d' -e '8ihello' filePath,该指令表示将filePath的第15行删除,然后在第8行插入hello,之后再进行标准输出,因为这里是同时进行两个动作,所以参数-e是不能省略的

   扩展:

   1.同时执行多个动作的时候也可以使用分号“;”来进行分隔,这样上面的命令可以利用分号变成sed '1,5d;8ihello' filePath

   2.当要在同一行上执行多个动作的时候还可以用大括号“{}”包起来,如sed -n '1,5{=;p}' filePath表示文件filePath的第15行需要执行两个动作,第一个动作“=”是打印出当前行的行号,第二个动作“p”是打印出当前行。

      -f:后面接一个文件的完整路径,这种情况是我们把需要执行的动作写在一个文件里面,然后利用sed -f filePath来执行

        例如:

        sed '1,5d' filePath改成使用-f的方式,先建立一个文件,假设为cmdFile,把命令放入该文件中,则cmdFile的内容为1,5d,这里面的命令是不需要用单引号包起来的,然后以后调用的时候就可以这样调用:sed -f cmdFile filePath,出来的效果和sed '1,5d' filePath是一样的。

      -r:使用该参数表示该sed使用的正则表达式支持延伸型正则表达式,预设是基础正则表达式语法

   动作:[n1[,n2]function]

      n1n2表示多少行到多少行(sed提供两种方式定位行,一种是数字,一种是正则表达式),当只有一个行的时候表示的就是代表的那一行,n1n2也可以使用正则表达式来进行选取,例如/hello/d则表示将包含hello的那一行找出来并删除,还可以使用$表示最后一行,例如sed '5,$d' filePath表示将文件filePath的第5行到最后一行的内容都删除然后进行标准输出

      /pattern1/,/pattern2/:表示满足pattern1那行到满足pattern2的那一行

      /pattern1/,5:表示满足pattern1那行到第5

      3,5!:表示不包含35行的其他的行

      function有以下几种:

        a:表示新增,后面接的内容将出现在指定行的下面,例如sed '5ahello' filePath将在文件filePath的第5行后面添加一行,即为第6行内容为hello,而sed '3,5ahello' filePath则将在文件filePath的第3到第5行每一行的后面都添加一行内容为hello的行

        i:表示插入,后面接的内容将插入到当前行,而当前行的内容将依次往后移,例如:sed '5ihello' filePath表示在文件filePath的第5行插入一行,内容为hello,然后原来的第5行将往下移动变为第6行,依此类推

        c:表示取代,是针对行而言的,后面接的内容将取代指定行的内容,例如:sed '3,5chello' filePath表示将文件filePath的第35行用hello取代

        d:表示删除,例如:sed '3,5d' filePath表示将文件filePath的第35行删除后再进行标准输出

        p:表示进行打印,例如:sed '3,5p' filePath表示将文件filePath的第35行的内容打印出来

        r:表示读取文件内容到指定行的下面

        w:表示把指定行的内容写入到指定文件

        s:表示取代,是针对每一行的内容而定的,例如:sed 's/hello/world/g' filePathsed '3,5s/hello/world/' filePath, 表示将文件filePath里面的每一行中出现的hello都替换为world,如果最后没有加上参数g表示只会替换每一行的第一个匹配的hello,在匹配的替换值中可以使用“&”来代表当前匹配的值,如:sed '3,5s/hello/00&/g' filePath,由于”&“符号代表当前匹配到的值,所以该语句的意思就是将filePath35行的hello都替换为00hello

   注:除了可以使用参数g之外,还可以使用以下参数:

      数字参数,使用数字参数表示匹配到的指定第几个才替换;

      参数p,使用参数p表示将替换的行进行打印出来,参数p需要与-n一起使用才能将替换的那一行打印出来,如:sed -n 's/hello/world/p' filePath

      参数w,使用参数w表示将替换的行写到指定的文件,如:sed 's/hello/world/w outputFile' filePath

      q:表示退出,当执行完指定的行之后就退出,如:sed '5 q' filePath,表示执行到第5行之后就退出,因为sed默认会进行打印操作,所以这句的意思是打印到5行之后就退出。

      y:表示字符变换,是针对单个字符进行的,如:sed '1,5y/12345/abcde/' filePath表示将filePath文件15行内容中的1替换为a2替换为b...5替换为e

      l:字母L命令可以用于显示内容中的特殊字符,如退格键等,如:sed 'l' filePath

      nn命令可以处理匹配行的下一行,如:sed '/hello/{n;s/123/321/g}'表示把包含hello字符串那一行的下一行中的123全部替换为321

       

       

Awk简介

awk [-F 分隔符] 'awk程序段' 输入文件:awk命令是用来把文件中每一行分成各个域来进行处理,预设的分隔符是空格键或者[tab],分割成的域会一次放入$1$2...$n等变量中,而$0则代表一行。与sed相似,awk也可以使用-f参数表示调用awk脚本文件

   awk由模式和动作组成,模式pattern决定了动作何时执行,模式一般就是正则表达式,awk支持“?”和“+”两个扩展元字符,而sedgrep是不支持的

   awk 'pattern{动作}' file,动作是需要放到大括号{}里面的,如:awk '/01/{print $0}' test,表示将文件test中包含01的行打印出来

   awk中内置的变量有:

      FS:表示分隔符,在设置分隔符的时候也可以不使用-F参数,而是在BEGIN中指定FS的值

      NR:表示当前执行的是第几行

      NF:表示当前行被分隔成几个域

      ARGC:表示当前awk命令的参数数量

      ARGV:是数组形式,表示当前awk命令的参数,ARGV[0]awkARGV[1]一般是文件名

        如:awk '{print $1}' inputFile,则ARGC2ARGV[1]inputFile

      OFS:输出的域之间的分隔符,默认是一个空格

      ORS:输出的记录之间的分隔符,默认是一个换行符

      RS:输入文件按照什么分隔记录,默认是换行符

   awk还可以使用awk -v var=val 'awk程序段' 输入文件,这样的形式来进行变量的申明与使用,使用-v申明和赋值的变量是可以在BEGIN语句段里面使用的,而直接接在awk程序段后面申明的变量是不能在BEGIN语句段里面使用的。

   awk还可以使用模式匹配来进行行的选择,如:awk -F":" '$2>5' test,表示把文件test中的每一行按照“:”进行分隔,把分隔后第2个变量的值大于5的行选出

   awk支持进行行的选择的模式有以下这些:

      >  大于

      == 等于

      <  小于

      >= 大于或等于

      <= 小于或等于

      != 不等于

      ~  匹配正则表达式,如:awk -F":" '$1~/hello/' test,表示把文件test按照":"进行分隔后,把第1个变量中包含hello的行选出

      !~ 不匹配正则表达式

   上面的这些模式也可以用来跟条件判断IF语句一起使用,如:awk -F"\t" '{if($1>5 && $2~/hello/) print $0}' test表示将test文件中的每一行按照tab键进行分隔,然后选出第一个域大于5并且第2个域包含hello的行

   awk中主要有3个语句段,一个是BEGIN,一个是MAIN,一个是ENDBEGIN语句段会在执行awk的主语句段之前执行,END语句段会在执行awk主语句段之后执行

      示例,使用BEGINMAINEND来计算文件的总行数:awk 'BEGIN{sum=0}{sum++}END{print "Sum:",sum}' test,由这个示例可以看出,在awk中定义的变量在使用时是不需要加上"$"dollar符号的。

   awk中内置的字符串函数:

      gsub(a,b) 表示将输入文件中的a替换为b,返回值是替换的个数

      gsub(a,b,c)  表示将c中的a替换为b,这里的c一般代表的是一个域,返回值是替换的个数

      index(s,t) 返回字符串s中第一个t出现的位置

      length(s) 返回字符串s的长度

      split(a,b,c) 将字符串ac为分隔符进行分割,分割后保存在数组b中,函数的返回值是分割后域的数量。

        如:echo "Hello,World" | awk '{print split($0,words,",");for(var in words) print words[var]}'

      match(s,t) 测试s是否包含匹配t的字符串,若匹配则返回匹配字符ts中第一次出现的位置,若不匹配则返回0

      sub(r,s,t) t中第一次出现的r替换为s,返回值是替换的个数

      sub(r,s)  将每一行中第一次出现的r替换为s,返回值是替换的个数

      substr(r,s)  返回字符串r中从s开始之后的字符串

      substr(r,s,t)   返回字符串r中从s开始长度为t的字符串15602232321 525345

      注:关于这些函数还可以这样使用:

        awk 'sub("A","B"){print $0}' file,表示将file中每一行的第一个A替换为B,如果替换了就将该行进行打印。

   awk脚本传递参数,方法是:

      awk 脚本 parameter=value 输入文件,示例:awk '{print num}' num=2 inputFile,该语句将根据inputFile的行数打印多个数字2

      awk脚本传递的参数不能在BEGIN语句段中使用,这是因为BEGIN语句段是一开始就执行的,这时候参数值还没有进行传递。

   awk内部的语法跟C语言类似,它里面也支持条件IF语句和循环语句whiledo whilefor,还有switch case语句,当满足某个条件需要进行多个动作时需要用大括号把多个动作包起来。

      if语句的语法:

        if (条件判断1)

           动作1

        else if (条件判断2)

           动作2

        else

           动作3

      if中的条件判断也可以使用“~”符号和正则表达式进行判断,如:

        if ($0~/hello/)

           print $0

        上面的语句表示如果该行包含hello字符串就将该行进行打印

      while语句的语法:

        while(条件判断)

           动作

      do while语句的语法:

        do

           动作

        while(条件判断)

      for语句的语法:

        for(初值;判断;变化)

           动作

        如:awk '{for(i=1;i<=NF;i++) print $i}' inputFile

   awk还支持数组,该数组的索引值可以为任意值,awk都会把它以键值对的形式进行储存,可以使用for(var in array)的形式对数组内容进行循环,也可以使用if (key in array)判断array中是否有以key为键值的键值对存在,可以使用delete删除数组中的一个元素或者删除整个数组,如:delete array[key]则会删除array中以key为索引的元素,要删除整个数组的时候,就直接使用delete 数组名,如:delete arrayName

      示例:

        awk 'BEGIN{data[1]=1;data[hello]="hello"}{if("1" in data) print "exist element 1."}' inputFile

   awk还支持多维数组,如:

      awk 'BEGIN{

        nums[0][0] = 0

        nums[0][1] = 1

        nums[0][2] = 2

        nums[0][3] = 3

        nums[1][0] = 1

        nums[1][1] = 2

        nums[1][2] = 3

        nums[1][3] = 4

        for (var1 in nums) {

           for (var2 in nums[var1]) {

              print nums[var1][var2]

           }

        }

      }{}' fileName

0
4
分享到:
评论

相关推荐

    Sed与Awk (中文版)

    **sed和awk工具的介绍与应用** sed和awk是广泛应用于UNIX系统中的两个文本处理工具。sed是流编辑器(stream editor)的缩写,而awk则是一种编程语言,得名于其三位开发者:Alfred Aho、Peter J. Weinberger和Brian ...

    SED与AWK 高清第三版

    《SED与AWK 高清第三版》是一本专注于Linux系统中强大文本处理工具sed和awk的教程。在Linux环境中,sed和awk是不可或缺的工具,它们能够高效地处理大量文本数据,进行搜索、替换、格式化等操作,极大地提高了运维...

    Sed与awk_中英文高清版

    《Sed与Awk》是IT领域中关于文本处理的经典之作,主要讲解了两种强大的命令行工具:Sed(流编辑器)和Awk(数据处理语言)。这两款工具在Linux和Unix系统中广泛使用,尤其适用于数据提取、转换、报告生成等任务。 ...

    Sed与awk第二版(中文高清版)

    在处理文本数据时,Sed和awk是两个非常强大的工具。它们广泛应用于Unix和类Unix系统中,比如Linux。Sed,即流编辑器,是一个非交互式的文本处理工具,它能够执行文本替换、插入、删除等操作,而awk则是一个强大的...

    sed和awk的必备书籍

    包括: 1. sed与awk+第三版(中文高清晰),内容非常全面详细,看了觉得很不错,学习sed和awk的必备书籍。 2. Effective awk Programming, 4th Edition 3. Sed与awk第二版(高清版).pdf

    sed & awk 第二版 例程 源代码 源码 sed & awk sourcecode

    为了使读者能够更好地学习和实践sed和awk,作者们提供了sedawk2progs这个包含所有书中例程和源代码的压缩包。通过这个压缩包,读者可以下载并运行这些程序,直观地了解它们是如何工作的,进而对这些程序进行修改和...

    Sed与awk第二版(高清版).pdf

    ### Sed与awk简介 #### Sed Sed(Stream Editor)是一种流编辑器,用于过滤和转换文本,特别是对于格式化的文本文件,其功能包括替换文本模式、删除行、插入行、提取数据等。它最初由Lee E. McMahon在1973年为贝尔...

    sed和awk使用实例

    sed 和 awk 使用实例 Sed 和 Awk 是两种强大的命令行工具,在 Unix 和 Linux 系统中广泛应用于文本处理和数据处理。本文将通过一些实例来展示 Sed 和 Awk 的使用场景和方法。 一、sed 使用实例 1. 删除 login....

    Sed与awk第二版(高清版)

    sed与awk使用指南 如果侵犯了您的权利,请您联系我。 本书介绍了一组名字奇特的 UNIX 实用工具 :sed 和 awk 。...sed 和 awk 的学习过程是很自然的,所以本书涵盖了上述 3 个程序,而重点集 中在 sed 和 awk 。

    sed and awk 101 hacks.pdf

    Sed和Awk是UNIX和Linux系统中极为重要的流编辑器和文本处理工具,它们能够通过简单的命令或脚本高效处理文本文件,实现复杂的文本转换和报告生成。接下来,我们将根据提供的文件内容详细地说明Sed和Awk的关键知识点...

    sed和awk单行命令比较

    ### sed和awk单行命令比较 本文将对两种常见的文本处理工具——`sed`和`awk`进行详细的对比分析,并通过具体的示例来说明这两种工具在处理文本时的不同之处。 #### 1. 基本介绍 - **sed** (stream editor):是一种...

    sed和awk简明手册

    ### sed和awk简明手册知识点总结 #### 一、sed简介 - **基本概念**: - sed(stream editor)是一种非交互式的面向字符流的编辑器,它主要用于文本文件的处理,尤其适用于批量替换、删除、添加等操作。 - sed的...

    sed与awk(第二版) - PDF(带目录)

    本书在一开始就给出一个概述和指南,论述了从grep到sed再到awk不断改进的功能。sed和awk具有相同的命令行语法,以脚本的形式接收用户的命令。因为所有这三个程序都使用UNIX正则表达式,因此书中用一章的篇幅来介绍...

    Sed & Awk 2nd Edition

    第十一章:提供多种awk版本的快速参考,包括POSIX awk和其他几个版本。 第十二章:详细介绍了如何使用sed和awk构建功能齐全的应用程序。 第十三章:提供了一些常用的脚本示例,以供读者参考和学习。 附录A是sed的...

    sed与awk+第三版和源代码

    《sed与awk+第三版》是一本专注于介绍两种强大的文本处理工具——sed和awk的书籍。这本书的第三版深入探讨了这两个工具的功能和用法,是IT从业者和程序员提升文本处理技能的重要参考资料。同时,提供的源代码文件...

    sed&awk第二版英文版pdf

    在深入分析《sed&awk第二版英文版pdf》内容前,先对标题和描述进行了解释。标题明确指出该PDF文档是关于“sed”与“awk”两个文本处理工具的详细介绍。sed是一个流编辑器,用于对文本数据执行基本的文本转换,而awk...

    Sed&Awk 2th Edition

    《Sed&Awk 2th Edition》是一本专注于Sed和Awk工具的第二版教程,对于想要深入理解和熟练运用这两个强大的文本处理工具的读者来说,无疑是一份宝贵的资源。Sed(Stream Editor)和Awk(Aho, Weinberger, Kernighan)...

Global site tag (gtag.js) - Google Analytics