现在的位置: 首页 > 综合 > 正文

awk及sed的使用小结

2018年03月21日 ⁄ 综合 ⁄ 共 2047字 ⁄ 字号 评论关闭

         awk,sed是linux比较复杂的两个命令,在处理格式化的文件对我们有很大的帮助,最近,学习了这方面的知识,做了下总结。

1awk

         语法: awk [-Ffield-separator] ' BEGIN{command1} pattern {command;} END{command2}'  file

         awk主要处理格式化的文件,读取文件的一行,分析该行,并通过分隔符获取到各个域位的值,然后通过pattern去匹配对应的行,匹配的上的话就执行command命令,其默认操作是打印出该行。对于命令中的BEGIN和END两个关键字,指明了在处理文本内容前和后,分别执行command1和command2处理操作。

         FS 输入域分隔符,默认为一个空格
         RS
输入记录分隔符
         NF
当前记录里域个数
         NR
到目前为止记录数
         OFS
输出域分隔符
         ORS
输出记录分隔符

         awk的典型用法:

         1.匹配某一行:

         awk'/101/' file; 匹配带有101字符串的行

         awk'$1==5' file 匹配第一个域值为5的行

         awk'$1=="CT"' file 匹配第一个域值为“CT"的行

        

         2 awk  'BEGIN { FS="[: \t|]" }{print $1,$2,$3}' 

          将分隔符设置为空格、:TAB|同时做为分隔符。
        

         3 awk '$1 ~ /101/ {print $1}' file 

          将行中第一个域中含有101字符串的第一个域打印出来

 

         4awk   'BEGIN { max=100 ;print "max=" max} {max=($1 >max ?$1:max); print $1,"Now max is "max}' file

         command中可以定义命令行自己用的变量,在该例子中定义了变量max,在command使用该变量时,直接使用其变量名即可,后面的 max=
($1 >max ?$1:max); 
很类似于C语言中的语法,当第一个域大于maxmax是第一个域的值。

 

         5awk '/tom/ {count++;}  END {print "tom was found "count" times"}' file

         END表示在所有输入行处理完后进行处理,统计

 

         6awk '{ print FILENAME,$0 }' file1 file2 file3>fileall 

         file1file2file3的文件内容全部写到fileall中,格式为打印文件并前置文件名。

 

         7awk ' $1!=previous { close(previous); previous=$1 }   {print substr($0,index($0," ") +1)>$1}' fileall 

         把合并后的文件重新分拆为3个文件。并与原文件一致。

 

         8awk 'BEGIN {"date"|getline d; print d}'  

         date命令得到的结果发送给getline,并将其打印出来

        

         9ifconfig-a|grep vlan.|awk '{cmd="brctl delbr " $1; system(cmd);}'

         将系统中的vlan.x的桥接口删除掉

 

2sed

         sed是一个文件处理工具,可以对文件的行进行操作,主要是对数据进行添加,删除,替换,选取等特定的工作,记住sed的操作不会对源文件产生影响,只是输出其处理后的结果,其命令行格式如下:

         sed[-nefri] 'command' 输入文本

         -n:使用安静模式,只把处理的部分输出到屏幕上。

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

 

         常用命令:

         a:新增,在新的一行添加一行字符串,for example:sed  '1a drinktea'  ab, sed  '1,3a drink tea'  ab

         d:删除,删除一行或多行, for example: sed '1d' ab, sed '$d' ab删除最后一行。

         p:显示某行,通常与-n共同使用,for example: sed -n '1p' ab, sed -n '2,$p' ab

         c: 替换某一行,for example: sed '1,2c Hi' ab,将第1,2行替换为HI

         s: 替换一行中的某部分,格式: sed 's/要替换的字符串/新的字符串/g' for example:

      sed -n '/ruby/p' ab|sed's/ruby/bird/g'

【上篇】
【下篇】

抱歉!评论已关闭.