




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章流編輯本章主要涉及到的知識點有:什么是sed:主要介紹什么是sed工具,sed工具的主要操作、工作方式以及地址表示方法,在sed命令中使用正則表達式等。sed命令的常用操作:主要介紹sed命令的注釋方法,打印文本,替換文本,刪除文本,追加文本,插入文本,移到下一行,讀寫文件以及多行模式等。組合命令:主要介紹如何在sed中組合多條命令以及如何將多條命令應用到一個地址范圍等。10.1sed命令及其語法sed命令是將一系列的編輯命令應用于一批文本的理想工具。sed命令擁有非交互式和高效的特點,可以為用戶節約大量的時間。本節將介紹sed命令的基礎知識。10.1.1sed命令以及語法sed命令是一個非交互式的文本編輯器,它可以對來自文本文件以及標準輸入的文本進行編輯。其中,標準輸入可以是來自鍵盤、文件重定向、字符串、變量或者是管道的文本。sed命令會從文件或者標準輸入中一次讀取一行數據,將其復制到緩沖區,然后讀取命令行或者腳本的編輯子命令,對緩沖區中的文本行進行編輯。重復此過程,一直到所有的文本行都處理完畢。sed命令的基本語法如下:sed[options][script][inputfile...]10.1.2sed命令的工作方式首先,用戶可以在命令行直接執行sed命令,其基本語法如下:sed[options]commandsinputfile其次,用戶可以將sed操作命令寫入腳本文件,然后通過sed命令讀取該文件并且執行其中的命令,其基本語法如下:sed[options]-fscriptinputfile最后,用戶通過將sed的操作命令寫入文件,然后將該腳本文件授予用戶執行權限,其基本語法如下:./scrptinputfile其中,script代表保存sed命令的腳本文件。在前面已經講過,在腳本文件中,用戶應該在#!符號后面執行該腳本的解釋器,因此在這種方式下,sed腳本文件的第一行應該如下:#!/bin/sed10.1.3使用行號定位文本行1.定位某個特定的行,語法如下:x2.定位某段連續的行,語法如下:x,y3.指定起始行和步長first~step4.指定文件的第一行和最后一行第1行:1最后1行:$5.指定某行后面的幾行,語法如下:x,+n10.1.4使用正則表達式定位文本行除了使用行號定位文本行之外,sed命令還支持正則表達式定位。sed命令中,正則表達式的語法如下:/regexp/10.2sed命令的常用操作除了定位參數之外,sed命令的另外一個組成部分就是編輯命令。常用的編輯命令有打印、插入、刪除以及替換等,本節將介紹如何在sed命令使用這些編輯命令。10.2.1sed編輯命令基本語法sed命令的基本語法如下:[address1[,address2]]command[argument]10.2.2選擇文本在sed命令中,選擇文本行主要通過位置參數來完成,基本語法如下:[address1[,address2]]p在上面的語法中,address1和address2都是位置參數。如果省略位置參數,則表示選擇整個文件。子命令p表示將緩沖區中的文本行執行輸出操作,即打印(print)緩沖區中的文本。#!/bin/bash#輸出1~3行,不使用-n選項sed'1,3p'students.txtecho"===================================="#輸出1~3行,使用-n選項sed-n'1,3p'students.txt[root@linuxchapter10]#./ex10-1.sh200200110 Abdul200200110 Abdul200200164 Abram200200164 Abram200200167 Bartley200200167 Bartley200200168 Bennett200200172 Cecil200200173 John200200187 Cat====================================200200110 Abdul200200164 Abram200200167 Bartley【例10-1】演示使用行定位方法來選擇輸出某些文本行#!/bin/bash#使用正則表達式定位result=`sed-n'/^20020017/p'students.txt`echo"$result"[root@linuxchapter10]#./ex10-2.sh200200172 Cecil200200173 John【例10-2】演示使用正則表達式來作為定位參數10.2.3替換文本使用sed命令,可以很方便地對文本文件中指定的文本進行替換操作。文本的替換需要使用s子命令,其語法如下:[address1[,address2]]s/pattern/replacemen/[flag]在上面的語法中,address1與address2都是位置參數,關于它們的用法請參見前面的幾個小節。在s命令中,位置參數通常會被省略,表示在所有的文本行中進行替換操作,其語法如下:s/pattern/replacemen/[flag]s子命令表示執行替換(substitute)操作。pattern為使用正則表達式表示的匹配模式,replacement為用來替換的由一般字符組成的字符串。#!/bin/bashecho"substitutethefirstpattern."#只將每行中第1次出現的小寫字母e替換為大寫字母Eresult=`sed's/e/E/'students.txt`echo"$result"echo"substituteallthepatterns."#將每一處的小寫字母e都替換為大寫字母Eresult=`sed's/e/E/g'students.txt`echo"$result"【例10-3】演示使用s子命令替換文本的方法[root@linuxchapter10]#./ex10-3.shsubstitutethefirstpattern.200200110 Abdul200200164 Abram200200167 BartlEy200200168 BEnnett200200172 CEcil200200173 John200200187 Catsubstituteallthepatterns.200200110 Abdul200200164 Abram200200167 BartlEy200200168 BEnnEtt200200172 CEcil200200173 John200200187 Cat#!/bin/bash#替換第1~3行中的所有的小寫字母e為大寫字母Eresult=`sed'1,3s/e/E/g'students.txt`echo"$result"【例10-4】使用行號定位方法來定位文本行[root@linuxchapter10]#./ex10-4.sh200200110 Abdul200200164 Abram200200167 BartlEy200200168 Bennett200200172 Cecil200200173 John200200187 Cat#!/bin/bash#使用混合位置參數result=`sed'1,/^200200167/s/e/E/g'students.txt`echo"$result"【例10-5】演示通過兩種方式來定位文本行[root@linuxchapter10]#./ex10-4.sh200200110 Abdul200200164 Abram200200167 BartlEy200200168 Bennett200200172 Cecil200200173 John200200187 Cat#!/bin/bash#將文件中的HTML標記替換為空result=`sed's/<[^>]*>//g'html.txt`echo"$result"【例10-6】演示通過兩種方式來定位文本行[root@linuxchapter10]#./ex10-6.sh
view(1881)review(5)score#!/bin/bash#引用與模式相匹配的子串result=`sed's/string/long&/'demo1.txt`echo"$result"【例10-7】演示&符號的使用方法[root@linuxchapter10]#./ex10-7.shThisisalongstring.#!/bin/bash#通過數字來引用模式中的子串result=`sed's/\(This\)\(is\)\(a\)\(string\)/\2\1\3\4/'demo1.txt`echo"$result"【例10-8】演示使用\n的形式來引用模式中子串[root@linuxchapter10]#./ex10-8.shisThisastring.10.2.4刪除文本sed提供了d子命令來實現文本行的刪除(delete),其語法如下:[address1[,address2]]d在上面的語法中,2個位置參數的涵義以及用法請參見前面的內容。命令d表示刪除位置參數指定的行。如果省略位置參數,則表示刪除文本文件中的所有的行。在執行刪除操作時,sed命令的會首先讀取一行文本到緩沖區,然后將符合位置參數的文本行刪除,接著再讀取并處理下一行。下面的例子演示了如何刪除指定的文本行。#!/bin/bash#刪除第1行result=`sed-e'1d'students.txt`echo"$result"【例10-9】通過sed命令刪除指定的文本行[root@linuxchapter10]#./ex10-9.sh200200164 Abram200200167 Bartley200200168 Bennett200200172 Cecil200200173 John200200187 Cat#!/bin/bash#刪除最后一行result=`sed-e'$d'students.txt`echo"$result"【例10-10】演示刪除文本文件最后一行的方法[root@linuxchapter10]#./ex10-10.sh200200110 Abdul200200164 Abram200200167 Bartley200200168 Bennett200200172 Cecil200200173 John#!/bin/bash#刪除1~4行result=`sed-e'1,4d'students.txt`echo"$result"echo"==============================="#刪除奇數行result=`sed-e'1~2d'students.txt`echo"$result"echo"=============================="#刪除偶數行result=`sed-e'0~2d'students.txt`echo"$result"echo"============================="#刪除從第1行開始,一直到以200200172開頭的行result=`sed-e'1,/^200200172/d'students.txt`echo"$result"echo"============================"#刪除從第4行開始,一直到最后一行的所有行result=`sed'4,$d'students.txt`echo"$result"【例10-11】演示sed命令中文本行的不同定位方法[root@linuxchapter10]#./ex10-11.sh200200172 Cecil200200173 John200200187 Cat===============================200200164 Abram200200168 Bennett200200173 John==============================200200110 Abdul200200167 Bartley200200172 Cecil200200187 Cat=============================200200173 John200200187 Cat============================200200110 Abdul200200164 Abram200200167 Bartley10.2.5追加文本所謂追加文本,是指將某些文本插入到某個位置的后面。sed命令提供了a子命令來實現文本的追加(append),其基本語法如下:[address1]astring從上面的語法可以得知,子命令a最多只能使用一個位置參數。參數string表示將要追加的文本。a子命令會將string代表的文本插入到address1所表示的位置的后面。這一點也是追加文本與后面將要介紹的插入文本的區別。#!/bin/bash#在第2行后面追加文本result=`sed'2a200200109Tom'students.txt`echo"$result"【例10-12】演示通過sed命令追加文本的方法[root@linuxchapter10]#./ex10-12.sh200200110 Abdul200200164 Abram200200109 Tom200200167 Bartley200200168 Bennett…#!/bin/bash#在以200200110開頭的文本行后面追加文本result=`sed'/^200200110/a200200109Tom'students.txt`echo"$result"【例10-13】通過正則表達式指定追加文本的位置[root@linuxchapter10]#./ex10-13.sh200200110 Abdul200200109 Tom200200164 Abram200200167 Bartley…10.2.6插入文本插入文本的操作與追加文本非常相似,只是插入的位置不同。追加文本是在位置參數指定的位置的后面插入文本,而插入文本則是位置參數指定的位置的前面插入文本。在sed命令中,子命令i用來實現文本的插入,其語法如下:[address1]istring與子命令a一樣,子命令i也是最多只能使用一個位置參數。位置參數address1用來指定要插入文本的位置,子命令i表示當前的操作是插入文本,參數string表示將要被插入的文本。#!/bin/bash#在以200200110開頭的文本行前面插入文本result=`sed'2i200200109Tom'students.txt`echo"$result"【例10-14】演示通過sed命令插入文本的方法[root@linuxchapter10]#./ex10-14.sh200200110 Abdul200200109 Tom200200164 Abram…10.3組合命令sed命令支持將多個子命令組合在一起使用,這一點非常重要,因為在通常情況下,用戶需要對文本進行多個不同的操作。如果不支持組合命令的話,則需要使用多個sed命令來完成;如果使用組合命令,則可以在一條sed命令中將這些操作完成。本節將介紹sed中的組合命令的使用方法。10.3.1使用-e選項執行多個子命令sed命令的-e選項可以使得sed將跟在其后面的字符串作為子命令執行。在前面的絕大部分例子中,由于都是一個子命令,所以將該選項省略。但是,如果想要為sed命令同時指定多個子命令,則必須使用多個-e選項。#!/bin/bash#將所有的小寫字母e替換為大寫字母,然后打印2~3行result=`sed-n-e's/e/E/g'-e'2,3p'students.txt`echo"$result"【例10-15】演示sed命令-e選項的使用方法[root@linuxchapter10]#./ex10-15.sh200200164 Abram200200167 BartlEy10.3.2使用分號執行多個子命令用戶還可以使用分號來將各個子命令隔開,其語法如下:sed-e'command1;command2...'filename其中,command1以及command2等表示多個子命令,這些子命令之間用分號隔開。filename參數表示要處理的文本文件。#!/bin/bash#使用分號隔開多個子命令result=`sed-e's/e/E/g;2i200100001Ellen'students.txt`echo"$result"【例10-16】演示通過分號執行多個子命令的方法[root@linuxchapter10]#./ex10-16.sh200200110 Abdul200100001 Ellen200200164 Abram200200167 BartlEy200200168 BEnnEtt200200172 CEcil200200173 John200200187 Cat10.3.3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學前教育論文選題怎么選
- 針對幼小銜接的建議
- 基于AI的數據分析與評估在醫藥教材建設中的應用
- 傳媒公司營銷管理制度
- 臨時倉庫飲料管理制度
- 倉儲物流住宿管理制度
- 會展策劃流程管理制度
- 億康中醫醫院管理制度
- 臨沂學生疫情管理制度
- 住宅安全用電管理制度
- 危機談判專題培訓課件
- 微水儀操作規程
- 轍叉部分的尺寸
- 大學主校區電力增容及改造工程一期(配電房增容及改造)施工組織設計
- 十字繡繡線號對照表
- 藝術課程標準(2022年版)
- 電氣、儀表設備安裝質量控制要點
- 求職心理調適專家講座
- 基于PLC的礦井通風控制系統設計
- GB/T 9576-2013橡膠和塑料軟管及軟管組合件選擇、貯存、使用和維護指南
- GB/T 6344-2008軟質泡沫聚合材料拉伸強度和斷裂伸長率的測定
評論
0/150
提交評論