sed

sed本身也是一个管道命令,可以分析standard input 。sed还可以将数据进行取代、删除、新增、截取特定行等等的功能。

sed的用法:sed [-nefr] 动作

                   选项与参数:

                           -n : 使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上。但如果                                      加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。

                           -e :  直接在指令列模式上进行sed的动作编辑

                           -f :  直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作:

                           -r : sed的动作支持的是延伸性正则表达式的语法(预设的是基础正则吧表达式语法)

                           -i :直接修改读取的文件内容,而不是由屏幕输出。

                 动作说明:[n1[,n2]]function

                  n1,n2 :不一定存在,一般代表【选择进行动作的行数】,如果我的动作需要再10-20行之间进行,则[10,20[动作行为]]

                 function 有下列这些选项:

                      a: 新增,a的后面可以接字符串,而这些字符串会在新的一行出现(当前的下一行)

                      c:取代, c的后面可以接字符串,而这些字符串可以取代 n1,n2之间的行

                      d:删除,d后面通常不接任何东西

                       i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现(当前的上一行)

                      p:打印,将某个选择的数据打印出,通常p会与参数sed -n 一起运行

                      s: 取代 可以直接进行取代的工作  eg:1,20s/old/new/g

示例:

范例1:将/etc/passwd的内容列出并且打印行号,同时,将2-5行删除

             [practice@rhel6 ~]$ nl /etc/passwd |sed '2,5d'

             将/etc/passwd的内容列出并且打印行号,同时,将2到最后一行显示出来

             [practice@rhel6 ~]$ nl /etc/passwd |sed -n '2,$p'

             sed的动作为‘2,5d’,sed后面接的动作,要用 ' ' 两个单引号括住。

范例2:将第2-5行的内容取代成【no 2-5】

             nl /etc/passwd |sed '2,5c NO 2-5'

范例3:部分数据的搜寻与取代

            sed 's/old word/new word/g'

AWK

awk也是非常棒的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理。因此,awk相当的合适处理小型的数据 数据处理。

在awk的括号内,每一行的每个字段都是有变量名称的,那就是$1,$2...等变量名称。awk是以行为一次处理的单位,而以字段为最小的处理单位。

AWK用法:awk '条件类型1{动作1}  条件类型2{动作2} ...' filename

awk后面接两个单引号并加上大括号{}来设定想要对数据进行的处理动作。AWK可以处理后续接的文件,也可以读取来自前个指令的standard output。AWK主要是处理每一行的字段内的数据,而默认的字段的分隔符为‘空格键’或‘tab’ 键。

AWK的内建变量

变量名称 代表意义
NF 每一行$0拥有的字段总数
NR 目前awk所处理的是第几行数据
FS 目前的分割字符,默认是空格键

示例:

范例1:取出账号与登入者的IP,且账号与IP之间以 [tab] 隔开

             last -n 5|awk '{print $1 "\t" $3}'