码迷,mamicode.com
首页 > 其他好文 > 详细

sed & awk

时间:2015-09-22 19:06:42      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:sed awk

sed: stream editor, 流编辑器;
awk(gawk):文本格式化工具,报告生成器

 

二 sed         stream editor for filtering and transforming text

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

工作机制:每次读取一行文本至“模式空间(pattern space)”中,在模式空间中完成处理;将处理结果输出至标准输出设备;

 

命令参数

-r                                                支持扩展正则表达式;
-n                                               静默模式;
-e script1 -e script2 -e script3   指定多脚本运行;
-f /path/to/script_file                从指定的文件中读取脚本并运行;
-i                                                直接修改源文件;

 

基本正则表达式元字符:
字符匹配:., [], [^]
次数匹配:*, \?, \+, \{m,n\}, \{n\}
位置锚定:^, $, \<, \>
分组及引用:\(\), \1, \2, ...
多选一:a|b|c

 

地址定界:
  #                          指定行
  $                          最后一行
  /regexp/              任何能够被regexp所匹配到的行
  \%regexp%          同上,只不过换作%为regexp边界符
  /regexp/|             匹配时忽略字符大小写
  \%regexp%|         匹配时忽略字符大小写,只不过换作%为regexp边界符

  startline,endline:
      #,/regexp/                      从#行开始,到第一次被/regexp/所匹配到的行结束,中间的所有行;
      #,#
      /regexp1/,/regexp2/      从第一次被/regexp1/匹配到的行开始,到第一次被/regexp2/匹配到的行结束,中间的所有行;
      #,+n                                从#行开始,一直到向下的n行;
  first~step                            指定起始行,以及步长;      1~2,2~2

 

sed的编辑命令
 d                                            删除模式空间中的行
 =                                            显示行号
 a \text                                    附加text
 i \text                                     插入text,支持\n实现多行插入
 c \text                                    用text替换匹配到的行
 p                                            打印模式空间中的行
 s/regexp/replacement/         替换由regexp所匹配到的内容为replacement
 g                                            全局替换
   
 w /path/to/somefile              把指定的内容另存至/path/to/somefile路径所指定的文件中
 r /path/from/somefile           在文件的指定位置插入另一个文件的所有内容,完成文件合并

[root@localhost ~]# echo Sunday | sed ‘s/day/night/‘       #替换Sunday中的day为night
Sunnight

 

 

高级命令:
 h                用模式空间中的内容覆盖保持空间的内容;
 H               把模式空间中的内容追加至保持空间中内容的后面;
 g               从保持空间中取到其内容,并将其覆盖模式空间中的内容;
 G               从保持空间中取到其内容,并将其追加在模式空间中的内容的后面;
 x               把保持空间和模式空间中的进行交换;
 n               读取匹配到的行的下一行至模式空间;(会覆盖模式空间中的原有内容);
 N               读取匹配到的行的下一行至模式空间,追加在模式空间中原有内容的后面;
 d               删除模式空间中的内容;
 D               删除多行模式空间中的首行;

 注意:命令功能可使用!取反;分号可用于分隔脚本;

 

示例:
 sed ‘G‘ /etc/issue: 在文件中的每行后方添加空白行;
 sed ‘$!d‘ /etc/fstab:保留最后一行;
 sed ‘/^$/d;G‘ /etc/issue: 保证指定的文件每一行后方有且只有一个空白行;
 sed ‘n;d‘ /etc/issue:保留奇数行;
 sed -n ‘1!G;h;$p‘ /etc/issue 反向输出一个文件
 sed ‘$!N;$!D‘ /etc/issue

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三awk

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文出自 “每天进步一点” 博客,请务必保留此出处http://1step.blog.51cto.com/1160799/1697101

sed & awk

标签:sed awk

原文地址:http://1step.blog.51cto.com/1160799/1697101

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!