sed本身也是一个管道命令,可以分析standard input 。sed还可以将数据进行取代、删除、新增、截取特定行等等的功能。
选项与参数:
-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也是非常棒的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理。因此,awk相当的合适处理小型的数据 数据处理。
在awk的括号内,每一行的每个字段都是有变量名称的,那就是$1,$2...等变量名称。awk是以行为一次处理的单位,而以字段为最小的处理单位。
awk后面接两个单引号并加上大括号{}来设定想要对数据进行的处理动作。AWK可以处理后续接的文件,也可以读取来自前个指令的standard output。AWK主要是处理每一行的字段内的数据,而默认的字段的分隔符为‘空格键’或‘tab’ 键。
变量名称 | 代表意义 |
NF | 每一行$0拥有的字段总数 |
NR | 目前awk所处理的是第几行数据 |
FS | 目前的分割字符,默认是空格键 |
范例1:取出账号与登入者的IP,且账号与IP之间以 [tab] 隔开
last -n 5|awk '{print $1 "\t" $3}'