《SED 单行脚本快速参考》的 awk 实现.pdf
《《SED 单行脚本快速参考》的 awk 实现.pdf》由会员分享,可在线阅读,更多相关《《SED 单行脚本快速参考》的 awk 实现.pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、HomeArchivesDownloadFAQsContactLoginHome SED 单行脚本快速参考的 awk 实现 KDE Software Compilation 4.4 Beta 1 发布Google Chrome for Linux 和 Mozilla Thunderbird 3 发布 LinuxTOY 是一个致力于提供 Linux 相关资讯的专题站点。如果您发现了好用好玩的 Linux 东东并愿意发扬自由、分享的精神,可以点击顶部导航 Contact 按钮进行投稿。捐助本站Subscribe in ReaderSubscribe by EmailFollow us on Twi
2、tterFollow us on Identi.caLinuxtoy on G+静态文件存储由又拍云存储提供batteryFree Online Storage SpaceLinux BooksPopular entriesPopular entriesArchlinux 安装指南Unix/Linux 命令速查表高效率编辑器 VimWget 使用技巧玩转 MPlayer平铺式窗口管理器 Awesome三款 Linux 下的免费桌面级杀毒软件窗口管理器 Openbox 入门指南最小化安装 Ubuntu五个你可能不知道的 Linux 桌面环境7 个致命的 Linux 命令很轻很强大:轻量级桌面环境
3、比较GNOME Shell 介绍终极 ShellZsh6 款高品质的免费 Linux CAD 应用程序25+个值得跟随的 Linux 相关 Twitter 帐号Linux 下的三款 Flash 独立播放器Linux 下的几个游戏模拟器平铺式窗口管理器 Musca 初体验History(历史)命令用法 15 例Fluxbox 配置bash 使用技巧10 本 OReilly 出版的免费好书SED 单行脚本快速参考的 awk 实现SED 单行脚本快速参考的 awk 实现2009-12-08 Toy Posted in CliRSS 撰文/bones7456 sed 和 awk 都是 Linux 下常
4、用的流编辑器,他们各有各的特色,本文并不是要做什么对比,而是权当好玩,把SED 单行脚本快速参考的 awk 实现 LinuxTOYhttp:/linuxtoy.org/archives/sed-awk.html第1页 共12页2013-9-6 11:08SED 单行脚本快速参考这文章,用 awk 做了一遍 至于孰好孰坏,那真是很难评论了。一般来说,sed 的命令会更短小一些,同时也更难读懂;而 awk 稍微长点,但是 if、while 这样的,逻辑性比较强,更加像“程序”。到底喜欢用哪个,就让各位看官自己决定吧!文本间隔:文本间隔:#在每一行后面增加一空行sed Gawk printf(%sn
5、n,$0)#将原来的所有空行删除并在每一行后面增加一空行。#这样在输出的文本中每一行后面将有且只有一空行。sed/$/d;Gawk!/$/printf(%snn,$0)#在每一行后面增加两行空行sed G;Gawk printf(%snnn,$0)#将第一个脚本所产生的所有空行删除(即删除所有偶数行)sed n;dawk f=!f;if(f)print$0#在匹配式样“regex”的行之前插入一空行sed/regex/x;p;x;awk if(/regex/)printf(n%sn,$0);else print$0#在匹配式样“regex”的行之后插入一空行sed/regex/Gawk if(
6、/regex/)printf(%snn,$0);else print$0#在匹配式样“regex”的行之前和之后各插入一空行sed/regex/x;p;x;G;awk if(/regex/)printf(n%snn,$0);else print$0编号:编号:#为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”#(tab,见本文末尾关于t的用法的描述)而不是空格来对齐边缘。sed=filename|sed N;s/n/t/awk i+;printf(%dt%sn,i,$0)#对文件中的所有行编号(行号在左,文字右端对齐)。sed=filename|sed N;s/;s/*(.6
7、,)n/1 /awk i+;printf(%6d%sn,i,$0)#对文件中的所有行编号,但只显示非空白行的行号。sed/./=filename|sed/./N;s/n/awk i+;if(!/$/)printf(%d%sn,i,$0);else print#计算行数(模拟“wc-l”)sed-n$=awk i+ENDprint i文本转换和替代:文本转换和替代:#Unix环境:转换DOS的新行符(CR/LF)为Unix格式。sed s/.$/#假设所有行以CR/LF结束SED 单行脚本快速参考的 awk 实现 LinuxTOYhttp:/linuxtoy.org/archives/sed-a
8、wk.html第2页 共12页2013-9-6 11:08sed s/M$/#在bash/tcsh中,将按Ctrl-M改为按Ctrl-Vsed s/x0D$/#ssed、gsed 3.02.80,及更高版本awk sub(/x0D$/,);print$0#Unix环境:转换Unix的新行符(LF)为DOS格式。sed s/$/echo-e r/#在ksh下所使用的命令sed s/$/echo r/#在bash下所使用的命令sed s/$/echo r/#在zsh下所使用的命令sed s/$/r/#gsed 3.02.80 及更高版本awk printf(%srn,$0)#DOS环境:转换Uni
9、x新行符(LF)为DOS格式。sed s/$/#方法 1sed-n p#方法 2DOS环境的略过#DOS环境:转换DOS新行符(CR/LF)为Unix格式。#下面的脚本只对UnxUtils sed 4.0.7 及更高版本有效。要识别UnxUtils版本的#sed可以通过其特有的“text”选项。你可以使用帮助选项(“help”)看#其中有无一个“text”项以此来判断所使用的是否是UnxUtils版本。其它DOS#版本的的sed则无法进行这一转换。但可以用“tr”来实现这一转换。sed s/r/infile outfile#UnxUtils sed v4.0.7 或更高版本tr-d r out
10、file#GNU tr 1.22 或更高版本DOS环境的略过#将每一行前导的“空白字符”(空格,制表符)删除#使之左对齐sed s/t*/#见本文末尾关于t用法的描述awk sub(/t+/,);print$0#将每一行拖尾的“空白字符”(空格,制表符)删除sed s/t*$/#见本文末尾关于t用法的描述awk sub(/t+$/,);print$0#将每一行中的前导和拖尾的空白字符删除sed s/t*/;s/t*$/awk sub(/t+/,);sub(/t+$/,);print$0#在每一行开头处插入5个空格(使全文向右移动5个字符的位置)sed s/awk printf(%sn,$0)#
11、以79个字符为宽度,将所有文本右对齐#78个字符外加最后的一个空格sed-e:a-e s/.1,78$/&/;taawk printf(%79sn,$0)#以79个字符为宽度,使所有文本居中。在方法1中,为了让文本居中每一行的前#头和后头都填充了空格。在方法2中,在居中文本的过程中只在文本的前面填充#空格,并且最终这些空格将有一半会被删除。此外每一行的后头并未填充空格。sed -e:a-e s/.1,77$/&/;ta#方法1sed -e:a-e s/.1,77$/&/;ta-e s/(*)1/1/#方法2awk for(i=0;i=0;j-)print Aj#将行中的字符逆序排列,第一个字成
12、为最后一字,(模拟“rev”)sed/n/!G;s/(.)(.*n)/&21/;/D;s/./awk for(i=length($0);i0;i-)printf(%s,substr($0,i,1);printf(n)#将每两行连接成一行(类似“paste”)sed$!N;s/n/awk f=!f;if(f)printf(%s,$0);else printf(%sn,$0)#如果当前行以反斜杠“”结束,则将下一行并到当前行末尾#并去掉原来行尾的反斜杠sed-e:a-e/$/N;s/n/;taawk if(/$/)printf(%s,substr($0,0,length($0)-1);else p
13、rintf(%sn,$0)#如果当前行以等号开头,将当前行并到上一行末尾#并以单个空格代替原来行头的“=”sed-e:a-e$!N;s/n=/;ta-e P;Dawk if(/=/)printf(%s,substr($0,2);else printf(%s%s,a,$0);a=nENDprintf(n)#为数字字串增加逗号分隔符号,将“1234567”改为“1,234,567”gsed:a;s/B0-93/,&/;ta#GNU sedsed-e:a-e s/(.*0-9)(0-93)/1,2/;ta#其他sed#awk的正则没有后向匹配和引用,搞的比较狼狈,呵呵。awk while(match
14、($0,/0-90-90-90-9+/)$0=sprintf(%s,%s,substr($0,0,RSTART+RLENGTH-4),substr(#为带有小数点和负号的数值增加逗号分隔符(GNU sed)gsed-r:a;s/(|0-9.)(0-9+)(0-93)/12,3/g;ta#和上例差不多awk while(match($0,/.0-90-90-90-90-9+/)$0=sprintf(%s,%s,substr($0,0,RSTART+RLENGTH-4)#在每5行后增加一空白行(在第5,10,15,20,等行后增加一空白行)gsed 05G#只对GNU sed有效sed n;n;n
15、;n;G;#其他sedSED 单行脚本快速参考的 awk 实现 LinuxTOYhttp:/linuxtoy.org/archives/sed-awk.html第4页 共12页2013-9-6 11:08awk print$0;i+;if(i=5)printf(n);i=0选择性地显示特定行:选择性地显示特定行:#显示文件中的前10行(模拟“head”的行为)sed 10qawk print;if(NR=10)exit#显示文件中的第一行(模拟“head-1”命令)sed qawk print;exit#显示文件中的最后10行(模拟“tail”)sed-e:a-e$q;N;11,$D;ba#用
16、awk干这个有点亏,得全文缓存,对于大文件肯定很慢awk ANR=$0ENDfor(i=NR-9;i=NR;i+)print Ai#显示文件中的最后2行(模拟“tail-2”命令)sed$!N;$!Dawk ANR=$0ENDfor(i=NR-1;i=65)print#显示包含65个以下字符的行sed-n/.65/!p#方法1,与上面的脚本相对应sed/.65/d#方法2,更简便一点的方法awk if(length($0)=8&NR10)print#删除文件中的最后一行sed$d#awk在过程中并不知道文件一共有几行,所以只能通篇缓存,大文件可能不适合,下面两个也一样awk BNR=$0END
17、for(i=0;i=NR-1;i+)print Bi#删除文件中的最后两行sed N;$!P;$!D;$dawk BNR=$0ENDfor(i=0;i=NR-2;i+)print Bi#删除文件中的最后10行sed-e:a-e$d;N;2,10ba-e P;D#方法1sed-n-e:a-e 1,10!P;N;D;N;ba#方法2awk BNR=$0ENDfor(i=0;i=NR-10;i+)print Bi#删除8的倍数行gsed 08d#只对GNU sed有效sed n;n;n;n;n;n;n;d;#其他sedawk if(NR%8!=0)print|head#删除匹配式样的行sed/pat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SED 单行脚本快速参考 SED 单行脚本快速参考的 awk 实现 SED 单行 脚本 快速 参考
限制150内