仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4507|回复: 20
打印 上一主题 下一主题

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

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:37:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行。
sed和awk都是linux下经常使用的流编纂器,他们各有各的特征,本文并非要做甚么对照,而是权当好玩,把《SED单行剧本疾速参考》这文章,用awk做了一遍~
至于孰好孰坏,那真是很难批评了。一样平常来讲,sed的命令会更短小一些,同时也更难读懂;而awk略微长点,可是if、while如许的,逻辑性对照强,加倍像“程序”。究竟喜好用哪一个,就让列位看官本人决意吧!
PS:貌似这个配色,单行的代码多了今后,拖动的时分会有点目炫的感到,迁就下吧,呵呵。
文本距离:
——–
#在每行前面增添一空行
  1. sedG
复制代码
  1. awk"{printf("%s",$0)}"
复制代码
#将本来的一切空行删除并在每行前面增添一空行。
#如许在输入的文本中每行前面将有且只要一空行。
  1. sed"/^$/d;G"
复制代码
  1. awk"!/^$/{printf("%s",$0)}"
复制代码
#在每行前面增添两行空行
  1. sed"G;G"
复制代码
  1. awk"{printf("%s",$0)}"
复制代码
#将第一个剧本所发生的一切空行删除(即删除一切偶数行)
  1. sed"n;d"
复制代码
  1. awk"{f=!f;if(f)print$0}"
复制代码
#在婚配式样“regex”的行之前拔出一空行
  1. sed"/regex/{x;p;x;}"
复制代码
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"
复制代码
#在婚配式样“regex”的行以后拔出一空行
  1. awk"{printf("%s",$0)}"0
复制代码
  1. awk"{printf("%s",$0)}"1
复制代码
#在婚配式样“regex”的行之前和以后各拔出一空行
  1. awk"{printf("%s",$0)}"2
复制代码
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"
复制代码
编号:
——–
#为文件中的每行举行编号(复杂的左对齐体例)。这里利用了“制表符”
#(tab,见本文开端关于’        ’的用法的形貌)而不是空格来对齐边沿。
  1. awk"{printf("%s",$0)}"4
复制代码
  1. awk"{printf("%s",$0)}"5
复制代码
#对文件中的一切行编号(行号在左,笔墨右端对齐)。
  1. awk"{printf("%s",$0)}"6
复制代码
  1. awk"{printf("%s",$0)}"7
复制代码
#对文件中的一切行编号,但只显现非空缺行的行号。
  1. awk"{printf("%s",$0)}"8
复制代码
  1. awk"{printf("%s",$0)}"9
复制代码
#盘算行数(摹拟“wc-l”)
  1. sed"/^$/d;G"0
复制代码
  1. sed"/^$/d;G"1
复制代码
文本转换和替换:
——–
#Unix情况:转换DOS的新行符(CR/LF)为Unix格局。
  1. sed"/^$/d;G"2
复制代码
  1. sed"/^$/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及更高版本
  1. awk"{printf("%s",$0)}"
复制代码
#DOS情况:转换Unix新行符(LF)为DOS格局。
  1. sed"/^$/d;G"5
复制代码
  1. sed"/^$/d;G"6
复制代码
#DOS情况:转换DOS新行符(CR/LF)为Unix格局。
#上面的剧本只对UnxUtilssed4.0.7及更高版本无效。要辨认UnxUtils版本的
#sed能够经由过程其独有的“–text”选项。你可使用匡助选项(“–help”)看
#个中有没有一个“–text”项以此来判别所利用的是不是是UnxUtils版本。别的DOS
#版本的的sed则没法举行这一转换。但能够用“tr”来完成这一转换。
  1. sed"/^$/d;G"7
复制代码
  1. sed"/^$/d;G"6
复制代码
#将每行前导的“空缺字符”(空格,制表符)删除
#使之左对齐
  1. sed"/^$/d;G"9
复制代码
  1. awk"!/^$/{printf("%s",$0)}"0
复制代码
#将每行拖尾的“空缺字符”(空格,制表符)删除
  1. awk"!/^$/{printf("%s",$0)}"1
复制代码
  1. awk"!/^$/{printf("%s",$0)}"2
复制代码
#将每行中的前导和拖尾的空缺字符删除
  1. awk"!/^$/{printf("%s",$0)}"3
复制代码
  1. awk"!/^$/{printf("%s",$0)}"4
复制代码
#在每行开首处拔出5个空格(使全文向右挪动5个字符的地位)
  1. awk"!/^$/{printf("%s",$0)}"5
复制代码
  1. awk"!/^$/{printf("%s",$0)}"6
复制代码
#以79个字符为宽度,将一切文本右对齐
#78个字符外加最初的一个空格
  1. awk"!/^$/{printf("%s",$0)}"7
复制代码
  1. awk"!/^$/{printf("%s",$0)}"8
复制代码
#以79个字符为宽度,使一切文本居中。在办法1中,为了让文本居中每行的前
#头和背面都添补了空格。在办法2中,在居中文本的过程当中只在文本的后面添补
#空格,而且终极这些空格将有一半会被删除。别的每行的背面并未添补空格。
  1. awk"!/^$/{printf("%s",$0)}"9
复制代码
  1. sed"G;G"0
复制代码
#在每行中查找字串“foo”,并将找到的“foo”交换为“bar”
  1. sed"G;G"1
复制代码
  1. sed"G;G"2
复制代码
#只外行中呈现字串“baz”的情形下将“foo”交换成“bar”
  1. sed"G;G"3
复制代码
  1. sed"G;G"4
复制代码
#将“foo”交换成“bar”,而且只外行中未呈现字串“baz”的情形下交换
  1. sed"G;G"5
复制代码
  1. sed"G;G"6
复制代码
#不论是“scarlet”“ruby”仍是“puce”,一概换成“red”
  1. sed"G;G"7
复制代码
  1. sed"G;G"8
复制代码
#颠倒一切行,第一行成为最初一行,顺次类推(摹拟“tac”)。
#因为某些缘故原由,利用上面命令时HHsedv1.5会将文件中的空行删除
  1. sed"G;G"9
复制代码
  1. awk"{printf("%s",$0)}"0
复制代码
#将行中的字符逆序分列,第一个字成为最初一字,……(摹拟“rev”)
  1. awk"{printf("%s",$0)}"1
复制代码
  1. awk"{printf("%s",$0)}"2
复制代码
#将每两行毗连成一行(相似“paste”)
  1. awk"{printf("%s",$0)}"3
复制代码
  1. awk"{printf("%s",$0)}"4
复制代码
#假如以后行以反斜杠“”停止,则将下一行并到以后行开端
#并往失落本来行尾的反斜杠
  1. awk"{printf("%s",$0)}"5
复制代码
  1. awk"{printf("%s",$0)}"6
复制代码
#假如以后行以等号开首,将以后行并到上一行开端
#并以单个空格取代本来行头的“=”
  1. awk"{printf("%s",$0)}"7
复制代码
  1. awk"{printf("%s",$0)}"8
复制代码
#为数字字串增添逗号分开标记,将“1234567”改成“1,234,567”
  1. awk"{printf("%s",$0)}"9
复制代码
  1. sed"n;d"0
复制代码
#为带有小数点和负号的数值增添逗号分开符(GNUsed)
  1. sed"n;d"1
复制代码
  1. sed"n;d"2
复制代码
#在每5行后增添一空缺行(在第5,10,15,20,等行后增添一空缺行)
  1. sed"n;d"3
复制代码
  1. sed"n;d"4
复制代码
选择性地显现特定行:
——–
#显现文件中的前10行(摹拟“head”的举动)
  1. sed"n;d"5
复制代码
  1. sed"n;d"6
复制代码
#显现文件中的第一行(摹拟“head-1”命令)
  1. sed"n;d"7
复制代码
  1. sed"n;d"8
复制代码
#显现文件中的最初10行(摹拟“tail”)
  1. sed"n;d"9
复制代码
  1. awk"{f=!f;if(f)print$0}"0
复制代码
#显现文件中的最初2行(摹拟“tail-2”命令)
  1. awk"{f=!f;if(f)print$0}"1
复制代码
  1. awk"{f=!f;if(f)print$0}"2
复制代码
#显现文件中的最初一行(摹拟“tail-1”)
  1. awk"{f=!f;if(f)print$0}"3
复制代码
  1. awk"{f=!f;if(f)print$0}"4
复制代码
#显现文件中的倒数第二行
  1. awk"{f=!f;if(f)print$0}"5
复制代码
  1. awk"{f=!f;if(f)print$0}"6
复制代码
#只显现婚配正则表达式的行(摹拟“grep”)
  1. awk"{f=!f;if(f)print$0}"7
复制代码
  1. awk"{f=!f;if(f)print$0}"8
复制代码
#只显现“不”婚配正则表达式的行(摹拟“grep-v”)
  1. awk"{f=!f;if(f)print$0}"9
复制代码
  1. sed"/regex/{x;p;x;}"0
复制代码
#查找“regexp”并将婚配行的上一行显现出来,但其实不显现婚配行
  1. sed"/regex/{x;p;x;}"1
复制代码
  1. sed"/regex/{x;p;x;}"2
复制代码
#查找“regexp”并将婚配行的下一行显现出来,但其实不显现婚配行
  1. sed"/regex/{x;p;x;}"3
复制代码
  1. sed"/regex/{x;p;x;}"4
复制代码
#显现包括“regexp”的行及其前先行,并在第一行之前加上“regexp”地点行的行号(相似“grep-A1-B1”)
  1. sed"/regex/{x;p;x;}"5
复制代码
  1. sed"/regex/{x;p;x;}"6
复制代码
#显现包括“AAA”、“BBB”和“CCC”的行(恣意序次)
  1. sed"/regex/{x;p;x;}"7
复制代码
  1. sed"/regex/{x;p;x;}"8
复制代码
#显现包括“AAA”、“BBB”和“CCC”的行(流动序次)
  1. sed"/regex/{x;p;x;}"9
复制代码
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"0
复制代码
#显现包括“AAA”“BBB”或“CCC”的行(摹拟“egrep”)
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"1
复制代码
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"2
复制代码
#显现包括“AAA”的段落(段落间以空行分开)
#HHsedv1.5必需在“x;”后到场“G;”,接上去的3个剧本都是如许
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"3
复制代码
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"4
复制代码
#显现包括“AAA”“BBB”和“CCC”三个字串的段落(恣意序次)
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"5
复制代码
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"6
复制代码
#显现包括“AAA”、“BBB”、“CCC”三者中任一字串的段落(恣意序次)
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"7
复制代码
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"8
复制代码
#显现包括65个或以上字符的行
  1. awk"{if(/regex/)printf("%s",$0);elseprint$0}"9
复制代码
  1. awk"{printf("%s",$0)}"00
复制代码
#显现包括65个以下字符的行
  1. awk"{printf("%s",$0)}"01
复制代码
  1. awk"{printf("%s",$0)}"02
复制代码
#显现部分文本——从包括正则表达式的行入手下手到最初一行停止
  1. awk"{printf("%s",$0)}"03
复制代码
  1. awk"{printf("%s",$0)}"04
复制代码
#显现部分文本——指定行号局限(从第8至第12行,含8和12行)
  1. awk"{printf("%s",$0)}"05
复制代码
  1. awk"{printf("%s",$0)}"06
复制代码
#显现第52行
  1. awk"{printf("%s",$0)}"07
复制代码
  1. awk"{printf("%s",$0)}"08
复制代码
#从第3行入手下手,每7行显现一次
  1. awk"{printf("%s",$0)}"09
复制代码
  1. awk"{printf("%s",$0)}"10
复制代码
#显现两个正则表达式之间的文本(包括)
  1. awk"{printf("%s",$0)}"11
复制代码
  1. awk"{printf("%s",$0)}"12
复制代码
选择性地删除特定行:
——–
#显现通篇文档,除两个正则表达式之间的内容
  1. awk"{printf("%s",$0)}"13
复制代码
  1. awk"{printf("%s",$0)}"14
复制代码
#删除文件中相邻的反复行(摹拟“uniq”)
#只保存反复行中的第一行,其他行删除
  1. awk"{printf("%s",$0)}"15
复制代码
  1. awk"{printf("%s",$0)}"16
复制代码
#删除文件中的反复行,不论有没有相邻。注重holdspace所能撑持的缓存巨细,大概利用GNUsed。
  1. awk"{printf("%s",$0)}"17
复制代码
  1. awk"{printf("%s",$0)}"18
复制代码
#删除除反复行外的一切行(摹拟“uniq-d”)
  1. awk"{printf("%s",$0)}"19
复制代码
  1. awk"{printf("%s",$0)}"20
复制代码
#删除文件中开首的10行
  1. awk"{printf("%s",$0)}"21
复制代码
  1. awk"{printf("%s",$0)}"22
复制代码
#删除文件中的最初一行
  1. awk"{printf("%s",$0)}"23
复制代码
  1. awk"{printf("%s",$0)}"24
复制代码
#删除文件中的最初两行
  1. awk"{printf("%s",$0)}"25
复制代码
  1. awk"{printf("%s",$0)}"26
复制代码
#删除文件中的最初10行
  1. awk"{printf("%s",$0)}"27
复制代码
  1. awk"{printf("%s",$0)}"28
复制代码
#删除8的倍数行
  1. awk"{printf("%s",$0)}"29
复制代码
  1. awk"{printf("%s",$0)}"30
复制代码
#删除婚配式样的行
  1. awk"{printf("%s",$0)}"31
复制代码
  1. awk"{printf("%s",$0)}"32
复制代码
#删除文件中的一切空行(与“grep‘.’”效果不异)
  1. awk"{printf("%s",$0)}"33
复制代码
  1. awk"{printf("%s",$0)}"34
复制代码
#只保存多个相邻空行的第一行。而且删除文件顶部和尾部的空行。
#(摹拟“cat-s”)
  1. awk"{printf("%s",$0)}"35
复制代码
  1. awk"{printf("%s",$0)}"36
复制代码
#只保存多个相邻空行的前两行。
  1. awk"{printf("%s",$0)}"37
复制代码
  1. awk"{printf("%s",$0)}"38
复制代码
#删除文件顶部的一切空行
  1. awk"{printf("%s",$0)}"39
复制代码
  1. awk"{printf("%s",$0)}"40
复制代码
#删除文件尾部的一切空行
  1. awk"{printf("%s",$0)}"41
复制代码
  1. awk"{printf("%s",$0)}"42
复制代码
#删除每一个段落的最初一行
  1. awk"{printf("%s",$0)}"43
复制代码
  1. awk"{printf("%s",$0)}"44
复制代码
特别使用:
——–
#移除手册页(manpage)中的nroff标志。在UnixSystemV或bashshell下使
#用’echo’命令时大概必要加上-e选项。
  1. awk"{printf("%s",$0)}"45
复制代码
  1. awk"{printf("%s",$0)}"46
复制代码
#提取旧事组或e-mail的邮件头
  1. awk"{printf("%s",$0)}"47
复制代码
  1. awk"{printf("%s",$0)}"48
复制代码
#提取旧事组或e-mail的注释部分
  1. awk"{printf("%s",$0)}"49
复制代码
  1. awk"{printf("%s",$0)}"50
复制代码
#从邮件头提取“Subject”(题目栏字段),并移除开首的“Subject:”字样
  1. awk"{printf("%s",$0)}"51
复制代码
  1. awk"{printf("%s",$0)}"52
复制代码
#从邮件头取得复兴地点
  1. awk"{printf("%s",$0)}"53
复制代码
  1. awk"{printf("%s",$0)}"54
复制代码
#猎取邮件地点。在上一个剧本所发生的那一行邮件头的基本长进一步的将非电邮地点的部分剃除。(见上一剧本)
  1. awk"{printf("%s",$0)}"55
复制代码
  1. awk"{printf("%s",$0)}"56
复制代码
#在每行开首加上一个尖括号和空格(援用信息)
  1. awk"{printf("%s",$0)}"57
复制代码
  1. awk"{printf("%s",$0)}"58
复制代码
#将每行开首处的尖括号和空格删除(排除援用)
  1. awk"{printf("%s",$0)}"59
复制代码
  1. awk"{printf("%s",$0)}"60
复制代码
#移除年夜部分的HTML标签(包含跨行标签)
  1. awk"{printf("%s",$0)}"61
复制代码
  1. awk"{printf("%s",$0)}"62
复制代码
#将分红多卷的uuencode文件解码。移除文件头信息,只保存uuencode编码部分。
#文件必需以特定按次传给sed。上面第一种版本的剧本能够间接在命令行下输出;
#第二种版本则能够放进一个带实行权限的shell剧本中。(由RahulDhesi的一
#个剧本修正而来。)
  1. awk"{printf("%s",$0)}"63
复制代码
  1. awk"{printf("%s",$0)}"64
复制代码
#将文件中的段落以字母按次排序。段落间以(一行或多行)空行分开。GNUsed利用
#字元“v”来暗示垂直制表符,这里用它来作为换行符的占位符——固然你也能够
#用其他未在文件中利用的字符来取代它。
  1. awk"{printf("%s",$0)}"65
复制代码
  1. awk"{printf("%s",$0)}"66
复制代码
#分离紧缩每一个.TXT文件,紧缩后删除本来的文件并将紧缩后的.ZIP文件
#定名为与本来不异的名字(只是扩大名分歧)。(DOS情况:“dir/b”
#显现不领路径的文件名)。
  1. awk"{printf("%s",$0)}"67
复制代码
  1. awk"{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只是个内核!这点很重要,你必须理解这一点。只有一个内核是不能构成一个操作系统的。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-5 01:02:19 | 只看该作者
Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。
因胸联盟 该用户已被删除
6#
发表于 2015-2-11 00:18:54 | 只看该作者
这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?
7#
发表于 2015-3-1 18:42:12 | 只看该作者
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。
深爱那片海 该用户已被删除
8#
发表于 2015-3-10 22:00:12 | 只看该作者
另外Linux上也有很多的应用软件,安装运行了这些软件后,你就可以在Linux上编辑文档、图?片,玩游戏、上网、播放多媒体文件等。
再现理想 该用户已被删除
9#
发表于 2015-3-10 22:47:20 | 只看该作者
我们自学,就这个循环的过程中,我们学习了基本操作,用vi,shell,模拟内存的分配过程等一些OS管理。
精灵巫婆 该用户已被删除
10#
发表于 2015-3-13 03:09:53 | 只看该作者
掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
柔情似水 该用户已被删除
11#
发表于 2015-3-13 04:08:25 | 只看该作者
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。
飘飘悠悠 该用户已被删除
12#
发表于 2015-3-18 20:42:43 | 只看该作者
通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。?
分手快乐 该用户已被删除
13#
发表于 2015-3-26 13:51:35 | 只看该作者
其中不乏很多IT精英的心血。我们学透以后更可以做成自己的OS!?
灵魂腐蚀 该用户已被删除
14#
发表于 2015-4-1 08:25:50 | 只看该作者
一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?
莫相离 该用户已被删除
15#
发表于 2015-4-6 20:11:11 | 只看该作者
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
小魔女 该用户已被删除
16#
发表于 2015-4-19 06:51:31 | 只看该作者
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
变相怪杰 该用户已被删除
17#
发表于 2015-4-20 11:26:43 | 只看该作者
即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。
admin 该用户已被删除
18#
发表于 2015-4-26 00:09:25 | 只看该作者
老实说,第一个程序是在C中编译好的,调试好了才在Linux下运行,感觉用vi比较麻烦,因为有错了不能调试,只是提示错误。
海妖 该用户已被删除
19#
发表于 2015-4-26 16:45:59 | 只看该作者
安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果Linux说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
愤怒的大鸟 该用户已被删除
20#
发表于 2015-4-27 17:51:35 | 只看该作者
Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 08:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表