爱飞 发表于 2015-1-18 11:37:10

Linux编程之《SED单行剧本疾速参考》的awk完成仓酷云

虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行。
sed和awk都是linux下经常使用的流编纂器,他们各有各的特征,本文并非要做甚么对照,而是权当好玩,把《SED单行剧本疾速参考》这文章,用awk做了一遍~
至于孰好孰坏,那真是很难批评了。一样平常来讲,sed的命令会更短小一些,同时也更难读懂;而awk略微长点,可是if、while如许的,逻辑性对照强,加倍像“程序”。究竟喜好用哪一个,就让列位看官本人决意吧!
PS:貌似这个配色,单行的代码多了今后,拖动的时分会有点目炫的感到,迁就下吧,呵呵。
文本距离:
——–
#在每行前面增添一空行
sedGawk"{printf("%s",$0)}"#将本来的一切空行删除并在每行前面增添一空行。
#如许在输入的文本中每行前面将有且只要一空行。
sed"/^$/d;G"awk"!/^$/{printf("%s",$0)}"#在每行前面增添两行空行
sed"G;G"awk"{printf("%s",$0)}"#将第一个剧本所发生的一切空行删除(即删除一切偶数行)
sed"n;d"awk"{f=!f;if(f)print$0}"#在婚配式样“regex”的行之前拔出一空行
sed"/regex/{x;p;x;}"awk"{if(/regex/)printf("%s",$0);elseprint$0}"#在婚配式样“regex”的行以后拔出一空行
awk"{printf("%s",$0)}"0awk"{printf("%s",$0)}"1#在婚配式样“regex”的行之前和以后各拔出一空行
awk"{printf("%s",$0)}"2awk"{if(/regex/)printf("%s",$0);elseprint$0}"编号:
——–
#为文件中的每行举行编号(复杂的左对齐体例)。这里利用了“制表符”
#(tab,见本文开端关于’        ’的用法的形貌)而不是空格来对齐边沿。
awk"{printf("%s",$0)}"4awk"{printf("%s",$0)}"5#对文件中的一切行编号(行号在左,笔墨右端对齐)。
awk"{printf("%s",$0)}"6awk"{printf("%s",$0)}"7#对文件中的一切行编号,但只显现非空缺行的行号。
awk"{printf("%s",$0)}"8awk"{printf("%s",$0)}"9#盘算行数(摹拟“wc-l”)
sed"/^$/d;G"0sed"/^$/d;G"1文本转换和替换:
——–
#Unix情况:转换DOS的新行符(CR/LF)为Unix格局。
sed"/^$/d;G"2sed"/^$/d;G"3#Unix情况:转换Unix的新行符(LF)为DOS格局。
sed"s/$/`echo-e`/"#在ksh下所利用的命令sed"s/$""/`echo`/"#在bash下所利用的命令sed"s/$/`echo`/"#在zsh下所利用的命令sed"s/$//"#gsed3.02.80及更高版本
awk"{printf("%s",$0)}"#DOS情况:转换Unix新行符(LF)为DOS格局。
sed"/^$/d;G"5sed"/^$/d;G"6#DOS情况:转换DOS新行符(CR/LF)为Unix格局。
#上面的剧本只对UnxUtilssed4.0.7及更高版本无效。要辨认UnxUtils版本的
#sed能够经由过程其独有的“–text”选项。你可使用匡助选项(“–help”)看
#个中有没有一个“–text”项以此来判别所利用的是不是是UnxUtils版本。别的DOS
#版本的的sed则没法举行这一转换。但能够用“tr”来完成这一转换。
sed"/^$/d;G"7sed"/^$/d;G"6#将每行前导的“空缺字符”(空格,制表符)删除
#使之左对齐
sed"/^$/d;G"9awk"!/^$/{printf("%s",$0)}"0#将每行拖尾的“空缺字符”(空格,制表符)删除
awk"!/^$/{printf("%s",$0)}"1awk"!/^$/{printf("%s",$0)}"2#将每行中的前导和拖尾的空缺字符删除
awk"!/^$/{printf("%s",$0)}"3awk"!/^$/{printf("%s",$0)}"4#在每行开首处拔出5个空格(使全文向右挪动5个字符的地位)
awk"!/^$/{printf("%s",$0)}"5awk"!/^$/{printf("%s",$0)}"6#以79个字符为宽度,将一切文本右对齐
#78个字符外加最初的一个空格
awk"!/^$/{printf("%s",$0)}"7awk"!/^$/{printf("%s",$0)}"8#以79个字符为宽度,使一切文本居中。在办法1中,为了让文本居中每行的前
#头和背面都添补了空格。在办法2中,在居中文本的过程当中只在文本的后面添补
#空格,而且终极这些空格将有一半会被删除。别的每行的背面并未添补空格。
awk"!/^$/{printf("%s",$0)}"9sed"G;G"0#在每行中查找字串“foo”,并将找到的“foo”交换为“bar”
sed"G;G"1sed"G;G"2#只外行中呈现字串“baz”的情形下将“foo”交换成“bar”
sed"G;G"3sed"G;G"4#将“foo”交换成“bar”,而且只外行中未呈现字串“baz”的情形下交换
sed"G;G"5sed"G;G"6#不论是“scarlet”“ruby”仍是“puce”,一概换成“red”
sed"G;G"7sed"G;G"8#颠倒一切行,第一行成为最初一行,顺次类推(摹拟“tac”)。
#因为某些缘故原由,利用上面命令时HHsedv1.5会将文件中的空行删除
sed"G;G"9awk"{printf("%s",$0)}"0#将行中的字符逆序分列,第一个字成为最初一字,……(摹拟“rev”)
awk"{printf("%s",$0)}"1awk"{printf("%s",$0)}"2#将每两行毗连成一行(相似“paste”)
awk"{printf("%s",$0)}"3awk"{printf("%s",$0)}"4#假如以后行以反斜杠“”停止,则将下一行并到以后行开端
#并往失落本来行尾的反斜杠
awk"{printf("%s",$0)}"5awk"{printf("%s",$0)}"6#假如以后行以等号开首,将以后行并到上一行开端
#并以单个空格取代本来行头的“=”
awk"{printf("%s",$0)}"7awk"{printf("%s",$0)}"8#为数字字串增添逗号分开标记,将“1234567”改成“1,234,567”
awk"{printf("%s",$0)}"9sed"n;d"0#为带有小数点和负号的数值增添逗号分开符(GNUsed)
sed"n;d"1sed"n;d"2#在每5行后增添一空缺行(在第5,10,15,20,等行后增添一空缺行)
sed"n;d"3sed"n;d"4选择性地显现特定行:
——–
#显现文件中的前10行(摹拟“head”的举动)
sed"n;d"5sed"n;d"6#显现文件中的第一行(摹拟“head-1”命令)
sed"n;d"7sed"n;d"8#显现文件中的最初10行(摹拟“tail”)
sed"n;d"9awk"{f=!f;if(f)print$0}"0#显现文件中的最初2行(摹拟“tail-2”命令)
awk"{f=!f;if(f)print$0}"1awk"{f=!f;if(f)print$0}"2#显现文件中的最初一行(摹拟“tail-1”)
awk"{f=!f;if(f)print$0}"3awk"{f=!f;if(f)print$0}"4#显现文件中的倒数第二行
awk"{f=!f;if(f)print$0}"5awk"{f=!f;if(f)print$0}"6#只显现婚配正则表达式的行(摹拟“grep”)
awk"{f=!f;if(f)print$0}"7awk"{f=!f;if(f)print$0}"8#只显现“不”婚配正则表达式的行(摹拟“grep-v”)
awk"{f=!f;if(f)print$0}"9sed"/regex/{x;p;x;}"0#查找“regexp”并将婚配行的上一行显现出来,但其实不显现婚配行
sed"/regex/{x;p;x;}"1sed"/regex/{x;p;x;}"2#查找“regexp”并将婚配行的下一行显现出来,但其实不显现婚配行
sed"/regex/{x;p;x;}"3sed"/regex/{x;p;x;}"4#显现包括“regexp”的行及其前先行,并在第一行之前加上“regexp”地点行的行号(相似“grep-A1-B1”)
sed"/regex/{x;p;x;}"5sed"/regex/{x;p;x;}"6#显现包括“AAA”、“BBB”和“CCC”的行(恣意序次)
sed"/regex/{x;p;x;}"7sed"/regex/{x;p;x;}"8#显现包括“AAA”、“BBB”和“CCC”的行(流动序次)
sed"/regex/{x;p;x;}"9awk"{if(/regex/)printf("%s",$0);elseprint$0}"0#显现包括“AAA”“BBB”或“CCC”的行(摹拟“egrep”)
awk"{if(/regex/)printf("%s",$0);elseprint$0}"1awk"{if(/regex/)printf("%s",$0);elseprint$0}"2#显现包括“AAA”的段落(段落间以空行分开)
#HHsedv1.5必需在“x;”后到场“G;”,接上去的3个剧本都是如许
awk"{if(/regex/)printf("%s",$0);elseprint$0}"3awk"{if(/regex/)printf("%s",$0);elseprint$0}"4#显现包括“AAA”“BBB”和“CCC”三个字串的段落(恣意序次)
awk"{if(/regex/)printf("%s",$0);elseprint$0}"5awk"{if(/regex/)printf("%s",$0);elseprint$0}"6#显现包括“AAA”、“BBB”、“CCC”三者中任一字串的段落(恣意序次)
awk"{if(/regex/)printf("%s",$0);elseprint$0}"7awk"{if(/regex/)printf("%s",$0);elseprint$0}"8#显现包括65个或以上字符的行
awk"{if(/regex/)printf("%s",$0);elseprint$0}"9awk"{printf("%s",$0)}"00#显现包括65个以下字符的行
awk"{printf("%s",$0)}"01awk"{printf("%s",$0)}"02#显现部分文本——从包括正则表达式的行入手下手到最初一行停止
awk"{printf("%s",$0)}"03awk"{printf("%s",$0)}"04#显现部分文本——指定行号局限(从第8至第12行,含8和12行)
awk"{printf("%s",$0)}"05awk"{printf("%s",$0)}"06#显现第52行
awk"{printf("%s",$0)}"07awk"{printf("%s",$0)}"08#从第3行入手下手,每7行显现一次
awk"{printf("%s",$0)}"09awk"{printf("%s",$0)}"10#显现两个正则表达式之间的文本(包括)
awk"{printf("%s",$0)}"11awk"{printf("%s",$0)}"12选择性地删除特定行:
——–
#显现通篇文档,除两个正则表达式之间的内容
awk"{printf("%s",$0)}"13awk"{printf("%s",$0)}"14#删除文件中相邻的反复行(摹拟“uniq”)
#只保存反复行中的第一行,其他行删除
awk"{printf("%s",$0)}"15awk"{printf("%s",$0)}"16#删除文件中的反复行,不论有没有相邻。注重holdspace所能撑持的缓存巨细,大概利用GNUsed。
awk"{printf("%s",$0)}"17awk"{printf("%s",$0)}"18#删除除反复行外的一切行(摹拟“uniq-d”)
awk"{printf("%s",$0)}"19awk"{printf("%s",$0)}"20#删除文件中开首的10行
awk"{printf("%s",$0)}"21awk"{printf("%s",$0)}"22#删除文件中的最初一行
awk"{printf("%s",$0)}"23awk"{printf("%s",$0)}"24#删除文件中的最初两行
awk"{printf("%s",$0)}"25awk"{printf("%s",$0)}"26#删除文件中的最初10行
awk"{printf("%s",$0)}"27awk"{printf("%s",$0)}"28#删除8的倍数行
awk"{printf("%s",$0)}"29awk"{printf("%s",$0)}"30#删除婚配式样的行
awk"{printf("%s",$0)}"31awk"{printf("%s",$0)}"32#删除文件中的一切空行(与“grep‘.’”效果不异)
awk"{printf("%s",$0)}"33awk"{printf("%s",$0)}"34#只保存多个相邻空行的第一行。而且删除文件顶部和尾部的空行。
#(摹拟“cat-s”)
awk"{printf("%s",$0)}"35awk"{printf("%s",$0)}"36#只保存多个相邻空行的前两行。
awk"{printf("%s",$0)}"37awk"{printf("%s",$0)}"38#删除文件顶部的一切空行
awk"{printf("%s",$0)}"39awk"{printf("%s",$0)}"40#删除文件尾部的一切空行
awk"{printf("%s",$0)}"41awk"{printf("%s",$0)}"42#删除每一个段落的最初一行
awk"{printf("%s",$0)}"43awk"{printf("%s",$0)}"44特别使用:
——–
#移除手册页(manpage)中的nroff标志。在UnixSystemV或bashshell下使
#用’echo’命令时大概必要加上-e选项。
awk"{printf("%s",$0)}"45awk"{printf("%s",$0)}"46#提取旧事组或e-mail的邮件头
awk"{printf("%s",$0)}"47awk"{printf("%s",$0)}"48#提取旧事组或e-mail的注释部分
awk"{printf("%s",$0)}"49awk"{printf("%s",$0)}"50#从邮件头提取“Subject”(题目栏字段),并移除开首的“Subject:”字样
awk"{printf("%s",$0)}"51awk"{printf("%s",$0)}"52#从邮件头取得复兴地点
awk"{printf("%s",$0)}"53awk"{printf("%s",$0)}"54#猎取邮件地点。在上一个剧本所发生的那一行邮件头的基本长进一步的将非电邮地点的部分剃除。(见上一剧本)
awk"{printf("%s",$0)}"55awk"{printf("%s",$0)}"56#在每行开首加上一个尖括号和空格(援用信息)
awk"{printf("%s",$0)}"57awk"{printf("%s",$0)}"58#将每行开首处的尖括号和空格删除(排除援用)
awk"{printf("%s",$0)}"59awk"{printf("%s",$0)}"60#移除年夜部分的HTML标签(包含跨行标签)
awk"{printf("%s",$0)}"61awk"{printf("%s",$0)}"62#将分红多卷的uuencode文件解码。移除文件头信息,只保存uuencode编码部分。
#文件必需以特定按次传给sed。上面第一种版本的剧本能够间接在命令行下输出;
#第二种版本则能够放进一个带实行权限的shell剧本中。(由RahulDhesi的一
#个剧本修正而来。)
awk"{printf("%s",$0)}"63awk"{printf("%s",$0)}"64#将文件中的段落以字母按次排序。段落间以(一行或多行)空行分开。GNUsed利用
#字元“v”来暗示垂直制表符,这里用它来作为换行符的占位符——固然你也能够
#用其他未在文件中利用的字符来取代它。
awk"{printf("%s",$0)}"65awk"{printf("%s",$0)}"66#分离紧缩每一个.TXT文件,紧缩后删除本来的文件并将紧缩后的.ZIP文件
#定名为与本来不异的名字(只是扩大名分歧)。(DOS情况:“dir/b”
#显现不领路径的文件名)。
awk"{printf("%s",$0)}"67awk"{printf("%s",$0)}"68上面的一些SED申明略过,必要的伴侣自行检察原文。
本文来自:http://li2z.cn/2009/12/07/sed_awk/

系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、pswho

金色的骷髅 发表于 2015-1-21 11:14:33

为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。

老尸 发表于 2015-1-30 16:45:23

尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。

只想知道 发表于 2015-2-2 22:04:17

Linux只是个内核!这点很重要,你必须理解这一点。只有一个内核是不能构成一个操作系统的。

第二个灵魂 发表于 2015-2-5 01:02:19

Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。

因胸联盟 发表于 2015-2-11 00:18:54

这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?

仓酷云 发表于 2015-3-1 18:42:12

甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。

深爱那片海 发表于 2015-3-10 22:00:12

另外Linux上也有很多的应用软件,安装运行了这些软件后,你就可以在Linux上编辑文档、图?片,玩游戏、上网、播放多媒体文件等。

再现理想 发表于 2015-3-10 22:47:20

我们自学,就这个循环的过程中,我们学习了基本操作,用vi,shell,模拟内存的分配过程等一些OS管理。

精灵巫婆 发表于 2015-3-13 03:09:53

掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。

柔情似水 发表于 2015-3-13 04:08:25

甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。

飘飘悠悠 发表于 2015-3-18 20:42:43

通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。?

分手快乐 发表于 2015-3-26 13:51:35

其中不乏很多IT精英的心血。我们学透以后更可以做成自己的OS!?

灵魂腐蚀 发表于 2015-4-1 08:25:50

一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?

莫相离 发表于 2015-4-6 20:11:11

和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。

小魔女 发表于 2015-4-19 06:51:31

Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。

变相怪杰 发表于 2015-4-20 11:26:43

即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。

admin 发表于 2015-4-26 00:09:25

老实说,第一个程序是在C中编译好的,调试好了才在Linux下运行,感觉用vi比较麻烦,因为有错了不能调试,只是提示错误。

海妖 发表于 2015-4-26 16:45:59

安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果Linux说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。

愤怒的大鸟 发表于 2015-4-27 17:51:35

Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。
页: [1] 2
查看完整版本: Linux编程之《SED单行剧本疾速参考》的awk完成仓酷云