grep、sed、awk

简介:

1、grep的用法


    grep(Global Research):根据模式匹配,进行字符串的搜索,并将匹配到的字符串所在的行显示出来。模式(pattern)是指文本字符以及正则表达式的元字符组合而成的匹配条件。

    grep命令的使用格式如下:

    grep [option] 'pattern' [file1,file2,....]

    其中常用的option有:

        -i :忽略大小写

        --color :将匹配到的字符用颜色显示

        -v :反向选择,显示没有被匹配到的行

        -o :只显示被匹配到的字符串,而不是显示整行

        -E :使用扩展正则表达式

        -A# :After,显示匹配到的字符串所在行  及其后面#行

        -B# :Before,显示匹配到的字符串所在行  及其前面#行

        -C# :Context,显示匹配到的字符串所在的行  及其上下#行

    其中pattern使用字符串或正则表达式均可,pattern要用单引号引起来。若使用扩展正则表达式需使用选项-E 


2、sed的用法


    sed是一款流编辑器,通过文件或者管道将文件内容按行读入内存空间(此内存空间称为模式空间),在模式空间中对读入的行进行过滤和处理,并将处理的结果输出,默认输出到屏幕上。每行处理完成再依次读入下一行进行处理。sed默认不改变原文件。 

    sed的基本语法格式:

    sed [option] 'AddressCommand' file1,file2,....

    sed 的AddressCommand也可以使用以下格式:

        Address{

        command1

        command2

        command3

        }

        右大括号必须单独处于一行,command后不能添加空格。



    Address的指定方法有以下几种:

        1、#1,#2   第 #1 行至 #2 行之间的所有行,中间用逗号隔开

        2、/pattern/   模式pattern为字符串或正则表达式

        3、/pattern1/,/pattern2/   第一次被pattern1匹配到的行 与 第一次被pattern2匹配到的行之间的所有行

        4、#    第 # 行

            $ 为最后一行     $-1  为倒数第二行

        5、#,+n   从第 # 行开始向后的 n 行,共 n+1 行。



    Command主要有以下几种:

wKiom1cqB2Pwbr26AAEZG64YB8Y233.png

        

        其中 r 命令可以使用:

           n r file  将指定的 file 中的内容添加到指定的第 n 行处。

        其中 w 命令可以使用:

           w file   将指定的 Adress 范围的内容保存至指定的file中。

        其中 s 命令的使用格式为:s/pattern/string/[flags]

            pattern   匹配需要替换的内容


            string    要替换为的新内容,string为以下几种时有特殊意义

    &  引用pattern匹配的整个字符串

    \n  支持后向引用,前提是pattern中使用分组\(\)

    \  转义字符


            flags     为修饰符,可以取多个值

    n  取值1-512之间数字,表示对一行中被pattern匹配到的第n次匹配到的结果进行替换。

    g  对全局匹配到的都替换,没有g只替换第一次匹配到的结果。

    p  打印模式空间的内容(即打印被模式匹配的行)

    w file  将模式空间(被模式匹配的行)写入到file中            


        注意:s 命令中分隔符 斜线  若在pattern和string中需要使用时,要使用转义字符\



    option常用的主要有:

        -n  静默模式,不显示模式空间的内容,即不在屏幕上打印

        -i  直接修改原文件(一般不建议使用)

        -e script1 -e script2 ...  可同时执行多个脚本(不是脚本文件)

        -f /path/to/script-file  从script-file中读取脚本指令

        -r  使用扩展正则表达式


3、awk的用法

    awk是一个报告生成工具,能将文本中的信息格式化以后进行显示。

    awk的工作机制是:逐行扫描文本,并对每行进行切片,寻找匹配特定模式的行,如果该行匹配,按照用户想要的操作对其进行处理;否则,对该行不做任何处理。    如果没有指定匹配模式pattern,匹配所有行,如果没有指定动作action,按默认动作把匹配的行显示到屏幕上,默认动作是print。


    awk默认以空白分隔符 对每行文本进行切片保存后,可以使用$1 $2 $3 ...进行每个字段的引用,$0表示引用整行文本


    awk的使用格式:


        awk [option] 'script' file1 file2 ... 表示从多个文件中读取文本信息,并根据script将其格式化后进行显示。script可分为两部分: pattern和action 因此awk的使用格式也可为:

        awk [option] 'pattern {action}' file1 file2 ...

        注意:awk的action要用大括号括起来


    awk的内置变量:

wKiom1cqzPbSWRemAAGIRNoA7Y8782.png

    

    awk的这些内置变量又可分为:记录变量和数据变量


    awk内部变量之记录变量:

        FS(filed separator )默认是空白字符,指定读取文本文件时,所使用的输入分隔符

        OFS( Output  Filed Separator)、

        ORS(Output  Filed  Separator)

        RS( Record Separator)输入文本信息所使用的换行符


    awk内部变量之数据变量:

        NR(the number  of  input records)awk命令所处理的记录数,如果有多个文件,这个数目会把处理的多个文件中的行统一计数

        FNR:当前正在处理的文件已处理多少行的行数,各自计数

        NF(Number  of  Field)统计当前正在处理的行有多少字段


    awk区分变量名的大小写,打印变量的值时不需要加$符号,加$符号的是用来打印字段。如$1 $2等


    awk定义变量的方式有两种:

        1、使用 -v 选项:-v var=value  每定义一个变量就使用一次 -v 选项。

        2、使用BEGIN模式时进行定义:BEGIN{var=value;语句}



    awk的操作符:

       算术运算符:

       赋值运算法:

       布尔值:任何非0值或非空字符串都为真,反之为假

       比较操作符:x ~ y   x字符串如果能被y正则表达式模式匹配到为真

       表达式间的逻辑关系  &&  ||

       条件表达式   selector?if-true-exp:if-false-exp


    awk的option:

        -F fs  指定以fs作为输入分隔符

        -v var=value  定义变量var的值为value

        -f script-file 从脚本文件中读取脚本取代输入的处理脚本


    awk常见的pattern类型:

        1、正则表达式,格式为 /RegExp/

        2、expression:表达式,其值为非0或非空字符时满足条件,如:$1== “abc”

        3、Range :指定匹配范围,格式为pattern1,pattern2

        4、BEGIN/END :特殊模式,仅在awk命令执行前运行一次或结束前运行一次。格式为 BEGIN{ }

        5、Empty :空模式,只有action,没有pattern。会对每行都做处理


    

    awk常用的action类型:

        1、expression

        2、Control  statements :控制语句(如条件判断、循环语句、case语句、自定义语句)

        3、Compound  statements:

        4、Input  statements:

        5、Output  statements:


     控制语句:

       1、if-else 语法:if (条件) 动作1; else 动作2

       2、while 语法:while (条件){动作1;动作2;....}  while是用来循环字段的,当对每行的字段做单独处理时才使用while循环

       3、do-while 语法:do {动作1,动作2,....}while (条件)

       4、for 语法:for ( 变量;条件;计数器){动作1;动作2;....}

              for可以用来遍历数组元素:for (i in array) {动作1,动作2,...}

       5、case 语法:switch (expression) {case VALUE  or  /regexp/: 动作1,动作2,... default:动作1,...}

       6、break和continue :常用于循环或case语句中

       7、next :提前结束对本行文本的处理,并接着处理下一行文本,continue是用来处理字段的


      awk经常使用的action:print、printf

print的使用:

       print  item1,item2,item3,.....

print命令后面的item可以省略,此时功能相当于print  $0 ;item之间要用逗号分隔,如果想输出空白行,需要使用print  “”

 

printf的使用:     

      printf  format,item1,item2,item3,.....

与print最大的不同是,printf需要指定format;

format用于指定后面的每个item的输出格式

printf语句不会自动打印换行符: \n

 

format格式的指示符都以%开头,后跟一个字符,如:

       %c 显示字符的ASCII

       %d,%i  十进制整数

       %e,%E  科学计数法显示数值

       %f 显示浮点数

       %g,%G  以科学计数法的格式或浮点数的格式显示数值

       %s 显示字符串

       %u 无符号整数

       %% 显示%自身

   format还可以有修饰符:

       【

       -表示左对齐,如%-d

       +  显示数值符号

       N  显示宽带为N

        】



本文转自 f_066 51CTO博客,原文链接:http://blog.51cto.com/ganmu/1770140,如需转载请自行联系原作者

相关文章
|
Perl
文本处理三剑客(grep、sed、awk)
文本处理三剑客(grep、sed、awk)
83 1
|
机器学习/深度学习 Perl 5G