仓酷云

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

[shell编程] 给大家带来CentOS Shell经常使用技能 sed

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!流编纂器sed
8.1sed简介
sed是streameditor的缩写,一种流编纂器,它一次处置一行内容。处置时,把以后处置的行存储在一时缓冲区中,称为“形式空间”(patternspace),接着用sed下令处置缓冲区中的内容,处置完成后,把缓冲区的内容送往屏幕。接着处置下一行,如许不休反复,直到文件开端。文件内容并没有改动,除非你利用重定向存储输入。sed次要用来主动编纂一个或多个文件,简化对文件的重复操纵,编写转换步伐等。
8.2sed下令格局
  1. sed[nefri]commandfile(s)
复制代码


经常使用选项:
-n  利用宁静(silent)形式。在一样平常sed的用法中,一切来自stdin的材料一样平常城市被列出到屏幕,但假如加上-n参数后,则只要经由sed特别处置的那一行(大概command)才会被列出来。
-e  同意多点编纂。
-f  间接将sed的举措写在一个档案内,-ffilename则能够实行filename内的sed举措。
-r  sed的举措增援的是延长型正轨暗示法的语法。(预设是基本正轨暗示法语法)
-i  间接修正读取的档案内容,而不是由屏幕输入。
经常使用command:
a  新增,a的前面能够接字串,而这些字串会在新的一行呈现(今朝的下一行)~
c  代替,c的前面能够接字串,这些字串能够代替n1,n2之间的行!
d  删除,由于是删除啊,以是d前面一般不接任何咚咚;
i  拔出,i的前面能够接字串,而这些字串会在新的一行呈现(今朝的上一行);
p  列印,亦行将某个选择的材料印出。一般p会与参数sed-n一同运作~
s  代替,能够间接举行代替的事情哩!一般这个s的举措能够搭配正轨暗示法!比方1,20s/old/new/g就是啦!
初级command:
下令功效形貌h拷贝patternspace的内容到holdingbuffer(特别缓冲区)。H追加patternspace的内容到holdingbuffer。g取得holdingbuffer中的内容,并替换以后patternspace中的文本。G取得holdingbuffer中的内容,并追加到以后patternspace的前面。n读取下一个输出行,用下一个下令处置新的行而不是用第一个下令。P打印patternspace中的第一行。//年夜写q加入sed。wfile写并追加patternspace到file的开端。!暗示前面的下令对一切没有被选定的行产生感化。s/re/string用string交换正则表达式re。=打印以后行号码。交换标志g行内周全交换,假如没有g,只交换第一个婚配。x交换patternspace和holdingbuffer中的文本。y把一个字符翻译为另外一个字符(可是不克不及用于正则表达式)。必要申明的是,sed中的正则和grep的基础不异,完整能够参照本系列的第一篇中的具体申明。
8.3sed实例
#cattestfile
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.94513
复制代码


实例1.1:假如模板north被找到,sed除打印一切行以外,另有打印婚配行。
#sed/north/ptestfile
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.94513
复制代码


实例1.2:-n选项作废了sed的默许举动。在没有-n的时分,包括模板的行被打印两次,可是在利用-n的时分将只打印包括模板的行。
#sed-n/north/ptestfile
  1. northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959
复制代码


实例:列出第5-7行
#nltestfile|sed-n5,7p
  1. 5southeastSEPatriciaHemenway4.0.74176easternEATBSavage4.4.845207northeastNEAMMainJr.5.1.94313
复制代码


实例2.1:删除第三行,其他行默许输入到屏幕。
#nltestfile|sed3d
  1. 1northwestNWCharlesMain3.0.983342westernWESharonGray5.3.975234southernSOSuanChin5.1.954155southeastSEPatriciaHemenway4.0.74176easternEATBSavage4.4.845207northeastNEAMMainJr.5.1.943138northNOMargotWeber4.5.89599centralCTAnnStephens5.7.94513
复制代码


实例2.2:删除2~5行
#nltestfile|sed2,5d
  1. 1northwestNWCharlesMain3.0.983346easternEATBSavage4.4.845207northeastNEAMMainJr.5.1.943138northNOMargotWeber4.5.89599centralCTAnnStephens5.7.94513
复制代码


实例2.3:从第三行删除到最初一行,其他行被打印。$暗示最初一行。
#nltestfile|sed3,$d
  1. 1northwestNWCharlesMain3.0.983342westernWESharonGray5.3.97523
复制代码


实例2.4:删除最初一行,其他行打印。
#nltestfile|sed$d
  1. 1northwestNWCharlesMain3.0.983342westernWESharonGray5.3.975233southwestSWLewisDalsass2.7.82184southernSOSuanChin5.1.954155southeastSEPatriciaHemenway4.0.74176easternEATBSavage4.4.845207northeastNEAMMainJr.5.1.943138northNOMargotWeber4.5.8959
复制代码


实例2.5:删除一切包括north的行,其他行打印。
#nltestfile|sed/north/d
  1. 2westernWESharonGray5.3.975233southwestSWLewisDalsass2.7.82184southernSOSuanChin5.1.954155southeastSEPatriciaHemenway4.0.74176easternEATBSavage4.4.845209centralCTAnnStephens5.7.94513
复制代码


实例3.1:在第二行后(即加在第三行)加上"UnitedStates"。
#nltestfile|sed2aUnitedStates
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945130
复制代码


假如要在第二行前加,则下令为
#nltestfile|sed2iUnitedStates
实例3.2:在第二行后加上两行文本。
#nltestfile|sed2aUnitedStates
>America
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945131
复制代码


若要新增两行,则每行之间都必需要以反斜线“”来举行新行的增添。
实例4.1:将第2~5行的内容代替为“No2-5number”。
#nltestfile|sed2,5cNo2-5number
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945132
复制代码


实例3.1:s暗示交换,g暗示下令感化于全部以后行。假如该行存在多个west,都将被交换为north,假如没有g,则只是交换第一个婚配。
格局:seds/要交换的字符串/新的字符串/g
#nltestfile|seds/west/north/g
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945133
复制代码


实例3.2:-n暗示只打印婚配行,假如某一行的开首是west,则交换为north。
#sed-ns/^west/north/ptestfile
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945134
复制代码


实例3.3:&标记暗示交换字符串中被找到的局部。一切以两个数字停止的行,最初的数字都将被它们本人交换,同时追加.5。
#nltestfile|seds/[0-9][0-9]$/&.5/
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945135
复制代码


实例3.4:一切的Hemenway被交换为Jones。-n选项加p下令则暗示只打印婚配行。
#nltestfile|sed-ns/Hemenway/Jones/gp
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945136
复制代码


实例3.5:模板Mar被包括在一对括号中,并在特别的存放器中保留为tag1,它将在前面作为1交换字符串,Margot被交换为Marlianne。
#nltestfile|sed-ns/(Mar)got/1lianne/p
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945137
复制代码


实例3.6:s前面的字符必定是分开搜刮字符串和交换字符串的分开符,默许为斜杠,可是在s下令利用的情形下能够改动。不管甚么字符紧随着s下令都以为是新的分开符。这个手艺在搜刮含斜杠的模板时十分有效,比方搜刮工夫和路径的时分。
#seds#3#88#gtestfile
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945138
复制代码


#seds@3@88@gtestfile
  1. northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945138
复制代码


实例3.7:一切在模板west和east所断定的局限内的行都被打印,假如west呈现在east前面的行中,从west入手下手到下一个east,不管这个east呈现在那里,两者之间的行都被打印,即便从west入手下手到文件的开端还没有呈现east,那末从west到开端的一切行都将打印。
#nltestfile|sed-n/south/,/east/p
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945130
复制代码


实例3.8:打印从第五行入手下手到第一个以northeast开首的行之间的一切行。
#sed-n5,/^northeast/ptestfile
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945131
复制代码


实例3.9:-e选项暗示多点编纂。第一个编纂下令是删除第一到第三行。第二个编纂下令是用Jones交换Hemenway。
#nltestfile|sed-e1,3d-es/Hemenway/Jones/
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945132
复制代码


实例3.10:将一切婚配含有north的行写进newfile中。
#sed-n/north/wnewfiletestfile
#catnewfile
  1. northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959
复制代码


实例4.1:i是拔出下令,在婚配形式行前拔出文本。
#sed/eastern/iNEWENGLANDREGIONtestfile
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945134
复制代码


实例5.1:找到婚配形式eastern的行后,实行前面花括号中的一组下令,每一个下令之间用逗号分开,n暗示定位到婚配行的下一行,s/AM/Archie/完成Archie到AM的交换,p和-n选项的适用,则只是打印感化到的行。
#sed-n/eastern/{n;s/AM/Archie/;p}testfile
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945135
复制代码


实例:-e暗示多点编纂,第一个编纂下令y将前三行中的一切小写字母交换为年夜写字母,-n暗示不显现交换后的输入,第二个编纂下令将只是打印输入转换后的前三行。注重y不克不及用于正则。
#sed-n-e1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/-e1,3ptestfile
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945136
复制代码


实例:打印完第二行前进出。
#sed2qtestfile
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945137
复制代码


实例:当模板Lewis在某一行被婚配,交换下令起首将Lewis交换为Joseph,然后再用q加入sed。
#sed/Lewis/{s/Lewis/Joseph/;q;}testfile
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945138
复制代码


实例:在sed处置文件的时分,每行都被保留在patternspace的一时缓冲区中。除非行被删除大概输入被作废,不然一切被处置过的行都将打印在屏幕上。接着patternspace被清空,并存进新的一行守候处置。鄙人面的例子中,包括模板的northeast行被找到,并被放进patternspace中,h下令将其复制并存进一个称为holdingbuffer的特别缓冲区内。在第二个sed编纂下令中,当到达最初一行后,G下令告知sed从holdingbuffer中获得该行,然后把它放回到patternspace中,且追加到如今已存在于形式空间的行的开端。
#sed-e/northeast/h-e$Gtestfile
  1. northwestNWCharlesMain3.0.98334northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945139
复制代码


实例:假如模板WE在某一行被婚配,h下令将使得该行从patternspace中复制到holdingbuffer中,d下令在将该行删除,因而WE婚配行没有在本来的地位被输入。第二个下令搜刮CT,一旦被找到,G下令将从holdingbuffer中取回行,并追加到以后patternspace的行开端。复杂的说,WE地点的行被挪动并追加到包括CT行的前面。
#sed-e/WE/{h;d;}-e/CT/{G;}testfile
  1. northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.89590
复制代码


实例:第一个下令将婚配northeast的行从patternspace复制到holdingbuffer,第二个下令在读取的文件的开端时,g下令告知sed从holdingbuffer中获得行,并把它放回到patternspace中,以交换已存在于patternspace中的。复杂说就是包括模板northeast的行被复制并掩盖了文件的开端行。
#sed-e/northeast/h-e$gtestfile
  1. northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.89591
复制代码


实例:模板WE婚配的行被h下令复制到holdingbuffer,再被d下令删除。了局能够看出WE的原有地位没有输入。第二个编纂下令将找到婚配CT的行,g下令将获得holdingbuffer中的行,并掩盖以后patternspace中的行,即婚配CT的行。复杂的说,任何包括模板northeast的行都将被复制,并掩盖包括CT的行。
#sed-e/WE/{h;d;}-e/CT/{g;}testfile
  1. northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.89592
复制代码


实例:第一个编纂中的h下令将婚配Patricia的行复制到holdingbuffer中,第二个编纂中的x下令,会将holdingbuffer中的文本思索到patternspace中,而patternspace中的文本被复制到holdingbuffer中。因而在打印婚配Margot行的中央打印了holdingbuffer中的文本,即第一个下令中婚配Patricia的行文本,第三个编纂下令会将交互后的holdingbuffer中的文本在最初一行的前面打印出来。
#sed-e/Patricia/h-e/Margot/x-e$Gtestfile
  1. northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.89593
复制代码
欢迎大家来到仓酷云论坛!
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-15 22:57:24 | 只看该作者

给大家带来CentOS Shell经常使用技能 sed

Windows?是图形界面的,Linux类似以前的?DOS,是文本界面的,如果你运行了图形界面程序X-WINDOWS后,Linux?也能显示图形界面,也有开始菜单、桌面、图标等。
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-21 10:27:49 | 只看该作者
为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。
因胸联盟 该用户已被删除
地板
发表于 2015-1-30 15:05:05 | 只看该作者
学习Linux半年了~个人认为不会的多在网上找资料网上有很多资料可以搜索到,LS那位说放手去搞。
小女巫 该用户已被删除
5#
发表于 2015-2-6 14:35:12 | 只看该作者
上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.
精灵巫婆 该用户已被删除
6#
发表于 2015-2-16 20:49:49 | 只看该作者
期间我阅读了不少关于Linux的相关资料,其中也不乏一些有趣的小故事,这既丰富了我的课余生活,也让我加深了对一些术语的理解,比玩游戏强多了。?
分手快乐 该用户已被删除
7#
发表于 2015-3-5 12:42:51 | 只看该作者
其次,Linux简单易学,因为我们初学者只是学的基础部分,Linux的结构体系非常清晰,再加上老师循序渐进的教学以及耐心的讲解,使我们理解起来很快,短期内就基本掌握了操作和运行模式。
不帅 该用户已被删除
8#
发表于 2015-3-12 09:14:25 | 只看该作者
如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。
愤怒的大鸟 该用户已被删除
9#
 楼主| 发表于 2015-3-19 23:03:13 | 只看该作者
众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 04:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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