|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!流编纂器sed
8.1sed简介
sed是streameditor的缩写,一种流编纂器,它一次处置一行内容。处置时,把以后处置的行存储在一时缓冲区中,称为“形式空间”(patternspace),接着用sed下令处置缓冲区中的内容,处置完成后,把缓冲区的内容送往屏幕。接着处置下一行,如许不休反复,直到文件开端。文件内容并没有改动,除非你利用重定向存储输入。sed次要用来主动编纂一个或多个文件,简化对文件的重复操纵,编写转换步伐等。
8.2sed下令格局
经常使用选项:
-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
- 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
- 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
- northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959
复制代码
实例:列出第5-7行
#nltestfile|sed-n5,7p
- 5southeastSEPatriciaHemenway4.0.74176easternEATBSavage4.4.845207northeastNEAMMainJr.5.1.94313
复制代码
实例2.1:删除第三行,其他行默许输入到屏幕。
#nltestfile|sed3d
- 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
- 1northwestNWCharlesMain3.0.983346easternEATBSavage4.4.845207northeastNEAMMainJr.5.1.943138northNOMargotWeber4.5.89599centralCTAnnStephens5.7.94513
复制代码
实例2.3:从第三行删除到最初一行,其他行被打印。$暗示最初一行。
#nltestfile|sed3,$d
- 1northwestNWCharlesMain3.0.983342westernWESharonGray5.3.97523
复制代码
实例2.4:删除最初一行,其他行打印。
#nltestfile|sed$d
- 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
- 2westernWESharonGray5.3.975233southwestSWLewisDalsass2.7.82184southernSOSuanChin5.1.954155southeastSEPatriciaHemenway4.0.74176easternEATBSavage4.4.845209centralCTAnnStephens5.7.94513
复制代码
实例3.1:在第二行后(即加在第三行)加上"UnitedStates"。
#nltestfile|sed2aUnitedStates
- 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
- 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
- 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
- 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
- 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/
- 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
- 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
- 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
- northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945138
复制代码
#seds@3@88@gtestfile
- 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
- 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
- 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/
- 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
- northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959
复制代码
实例4.1:i是拔出下令,在婚配形式行前拔出文本。
#sed/eastern/iNEWENGLANDREGIONtestfile
- 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
- 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
- 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
- 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
- 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
- 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
- northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.89590
复制代码
实例:第一个下令将婚配northeast的行从patternspace复制到holdingbuffer,第二个下令在读取的文件的开端时,g下令告知sed从holdingbuffer中获得行,并把它放回到patternspace中,以交换已存在于patternspace中的。复杂说就是包括模板northeast的行被复制并掩盖了文件的开端行。
#sed-e/northeast/h-e$gtestfile
- 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
- 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
- northwestNWCharlesMain3.0.98334northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.89593
复制代码 欢迎大家来到仓酷云论坛! |
|