您的位置:首页 > 运维架构 > Linux

linux下sed和awk命令使用入门

2015-09-04 16:04 369 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/AngelaHanbing/article/details/48209819

先发两个连接,因为我就是从这两个链接入手的~

1、sed使用入门:https://www.geek-share.com/detail/2534263760.html

2、awk使用入门:https://www.geek-share.com/detail/2569071680.html


对比grep、sed、awk

1、三者的共同点是都支持正则表达式,通常都用于文本的处理。

2、三者的不同点是grep主要用于查找文本,sed用于对文本进行增加、删除和修改,而awk用于对文本进行统计,感觉sed很像windows下的word,而awk很像excel,只不过是没有样式的命令行方式


sed使用感受

sed的使用格式:

    sed [-nefri] ‘command’ filename

其中用过选项:

    -n:只显示被sed命令处理的部分,其余的不显示。这个参数真好,修改过的地方一目了然。

    -i:使用该参数后,文件内容会被修改,而不加该参数,虽然终端输出是修改过的内容,但文件内容不变。   

      -e:表示多点编辑 -e 'command' -e 'command' ....  filename==== sed -e '1p' -e '$d' test.txt

常用命令:

    a:==add追加,在当前行追加一行================sed '1,8a end' test.txt

    p:==print常和-n一起使用,只是简单输出选中的行====sed -n '5,$p' test.txt

    d:==delete删除选中的行=======================sed '$d' test.txt

    c:==replace/displace将选中的行用新的字符串替换掉==sed '1,6c hello world!' test.txt

     i:==insert插入到当前行的上一行=================sed '5i hello world!' test.txt

    s:==supersede跟c一样,也是替换,但可以使用正则

    sed -n '/test/p' test.txt | sed 's/test/hello/g'

    上边的命令还可以写成一条命令:

    sed -n '/test/{s/test/hello/g;p}'

    即花括号{}中可以用多个命令,且它们之间用分号;隔开。

    总结:sed的命令使用方式是先指明参数,表明处理的数据该如何显示或者使用的sed是命令行还是存储在文件中等,而命令的写法一定是放在一对儿单引号‘’中,先指明待处理的行,可直接用行号指定,也可用正则//选取,然后指明增、删、改、输出等行为,根据行为的不同,其后可跟或不跟字符串,filename指明对哪个文件进行修改。

ps:我也不知道自己为啥要写这样一个总结,总觉得写完后再用sed时,语法就记得很清晰了。

   


awk使用感受

第一次接触awk时很震惊,它竟然是一门程序设计语言!!!!!!!!!!虽然现在经历有限,只能看看入门,但以后有时间一定要再仔细钻研一下。

调用方式:

1、命令行方式:awk [-F 'seperator'] 'pattern + {action}' {filename}

2、脚本方式:#!/bin/awk

3、文件调用:awk -f awk-script-file filename

命令行方式:

①awk -F ':' '{print $1“\t”$5}' test.txt=====这里只有action,没有pattern,默认的pattern应该是取所有行。

②awk -F ':' 'BEGIN {print "key,value"} {print $1“\t”$5} END {print "end_key,end_value"}' test.txt

命令②执行顺序是先执行BEGIN的action,然后对文件进行处理,即中间的{},再执行END后边的action。

③awk -F ':' '{printf "filename=%s,linenumber=%s,columns=%s,size=%s",FILENAME,NR,NF,$8}' test.txt

awk竟然有自己的内置变量,当然是处理文本时最常用的,而且支持像C一样的输出方式,真让人忍不住要用一用。

④awk 'BEGIN {count=0;} {count++;} END {print "total num of files is:",count,个}' test.txt

awk可以自定义变量,且不用声明,后续使用直接引用即可,不需加入$等符号。

⑤awk -F ':' 'BEGIN {count=0;} {if($5 > 1024) { count++;}} END {print "num of files > 1kb is:",count}' test.txt

⑥awk -F ':' 'BEGIN {count=0;} {if($5>1024){filename[count]=$1;count++;}} END {for(i=0;i<count;i++){printf "the %s file is %s",i,filename[i]}}'

真心是佩服发明awk的几位前辈呀。

个人觉得需要注意的地方除了使用语法外,一定要记得-F ‘seperator’,因为如果实际文件不是以空格来区分域的话,那取出的$i都将是一整行。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: