Linux三剑客之sed、awk

sed
 
流编辑器,一次处理一行内容
 
 
 
命令形式:

- h 显示帮助

- n 仅显示script处理后的结果

- e<script> 以选项中指定的script来处理输入的文本文件

- f<script FILE>以选项中指定的script文件来处理输入的文本文件

常用动作

a:新增 sed - e '2 a newline' 在第2行后面新增一行

c:取代 sed -e '3,5 c newline' test.txt   取代第3行至第5行的内容

d:删除  sed -e '2,3 d' test.txt 删除第2至第3行的内容

i:插入 sed -e '2,3 i newline' test.txt  在第2至第5行前面插入一行内容

p:打印 sed -n '/root/p' test.txt  将test.txt文件中所有的root打印出来

s:取代 sed -e 's/root/writer/g' test.txt 将所有的root取代为writer/全局替换

使用cat命令查找 test.txt文件中数据并没有改变,是因为 sed有一个模式空间的概念,因此加参数-i可以修改成功!但是不要和上面的sed -e '2 i newline'中的i混了!

查看帮助:

man sed

sed -h

sed与grep的区别

grep不可以像sed一样新增、删除、插入等操作,只能替换,因此sed看上去要比grep更高级一些 

awk 

把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理

 
 

 

 

FILENAME:awk浏览的文件名

BEGIN :处理文本之前要执行的操作

END :处理文本之后要执行的操作

FS :设置输入域分隔符,等价于命令行 -F选项

NF:浏览记录的域的个数(列数)

NR:已读的记录数(行数)

OFS:输出域分隔符

ORS:输出记录分隔符

RS:控制记录分隔符

$0:整条记录

$1:表示当前的第一个域.....依次类推

 

awk -F : '/home/{print $3}' /etc/passwd 这里要注意空格 

awk -F : 'NR==2{print $0}' /etc/passwd

 

1.awk 'BEGIN{print "BEGIN,begin"} NR==2{print $1 $2}' /etc/passwd 在passwd文件的第二行的第一、第二列加入标题
2.echo '123|456|789'|awk 'BEGIN{RS="|"}{print$0}'   RS="|",一定是加的双引号,单引号会报错,RS不要和NR混淆了,NR== 是双等号RS= 等号
 
posted @ 2020-03-18 18:13  zhaikunkun  阅读(110)  评论(0)    收藏  举报