1.sed的概念
創(chuàng)新互聯(lián)公司專業(yè)IDC數據服務器托管提供商,專業(yè)提供成都服務器托管,服務器租用,德陽服務器托管,德陽服務器托管,成都多線服務器托管等服務器托管服務。sed意為流編輯器(Stream Editor),在Shell腳本和Makefile中作為過濾器使用非常普遍,也就是把前一個程序的輸出引入sed的輸入,經過一系列編輯命令轉換為另一種格式輸出。sed 是基于Basic模式的,sed和vi都源于早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的。
2.sed的工作原理
sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩
沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內容,處理
完成后,把緩沖區(qū)的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件
內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化
對文件的反復操作。
3.sed的命令行格式
sed命令行的基本格式為:
sed option 'script' file1 file2 ...
sed option -f scriptfile file1 file2 ...
sed處理的文件既可以由標準輸入重定向得到,也可以當命令行參數傳入,命令行參數可
以一次傳入多個文件,sed會依次處理。sed的編輯命令可以直接當命令行參數傳入,也可以寫
成一個腳本文件然后用-f參數指定,編輯命令的格式為/pattern/action
其中pattern是正則表達式,action是編輯操作。sed程序一行一行讀出待處理文件,如果某
一行 與pattern匹配,則執(zhí)行相應的action,如果一條命令沒有pattern而只有action,這個
action將作用于待處理文件的每一行。
4.sed命令和選項
命令
a\ : 在當前行后添加一行或多行。多行時除最后一行外,每行末尾需用“\”續(xù)行
c\ : 用此符號后的新文本替換當前行中的文本。多行時除最后一行外,每行尾需
用”\"續(xù)行
i\ :在當前行之前插入文本。多行時除最后一行外,每行末尾需用”\"續(xù)行d刪除 行
h : 把模式空間里的內容復制到暫存緩沖區(qū)
H :把模式空間里的內容追加到暫存緩沖區(qū)
g :把暫存緩沖區(qū)里的內容復制到模式空間,覆蓋原有的內容
G:把暫存緩沖區(qū)的內容追加到模式空間里,追加在原有內容的后面
l :列出非打印字符
p :打印行
n :讀入下一輸入行,并從下一條命令而不是第一條命令開始對其的處理
q :結束或退出sed
r :從文件中讀取輸入行
! :對所選行以外的所有行應用命令
s :用一個字符串替換另一個
g :在行內進行全局替換
w :將所選的行寫入文件
x :交換暫存緩沖區(qū)與模式空間的內容
y :將字符替換為另一字符(不能對正則表達式使用y命令)
注:紅色字體標注的是重點掌握的
選項
-e :進行多項編輯,即對輸入行應用多條sed命令時使用
-n :取消默認的輸出
-f :指定sed腳本的文件名
5.sed的基本使用
1>/pattern/p:打印匹配pattern的行
使用p命令需要注意,sed是把待處理文件的內容連同處理結果一起輸出到標準輸出的,
因此p命令表示除了把文件內容打印出來之外還額外打印一遍匹配pattern的行。比如一個
文件file的內容是
滿足以1開頭的行并打?。?/p>
要想只輸出處理結果,應加上-n選項,這種用法相當于grep命令
2> /pattern/d :刪除匹配pattern的行
刪除file中以6結尾的行
注意,sed命令不會修改原文件,刪除命令只表示某些行不打印輸出,而不是從原文件中刪去。
3> /pattern/s/pattern1/pattern2/:查找符合pattern的行,如果不加g的話就
將該行第一個匹配pattern1的字符串替換為pattern2,如果加g的話就將該行所有pattern1替換為pattern2.
4>在替換中&符號和\1 的使用
&符號相當于要替換的字符串本身,\1和&符合有相同的作用
5> sed -i : 做的操作會修改原文件
6>定址
例如打印file里的1-2行內容
5.模式空間和保持空間
sed在正常情況下,將處理的行讀入模式空間(pattern space),腳本中
的“sedcommand(sed命令)”就一條接著一條進行處理,直到腳本執(zhí)行完畢。然后
該行被輸出,模式(pattern space)被清空;接著,在重復執(zhí)行剛才的動作,文件
中的新的一行被讀入,直到文件處理完畢。
一般情況下,數據的處理只使用模式空間(pattern space),按照如上的邏輯即
可完成主要任務。但是某些時候,使用通過使用保持空間(hold space),還可以
帶來意想不到的效果。
模式空間:可以想成工程里面的流水線,數據之間在它上面進行處理。
保持空間:可以想象成倉庫,我們在進行數據處理的時候,作為數據的暫存區(qū)域。
正常情況下,如果不顯示使用某些高級命令,保持空間不會使用到!
sed命令:
+ g:[address[,address]]g 將hold space中的內容拷貝到pattern space中,原來 pattern space里的內容清除
+ G:[address[,address]]G 將hold space中的內容追加到pattern space\n后
+ h:[address[,address]]h 將pattern space中的內容拷貝到hold space中,原來 的hold space里的內容被清除
+ H:[address[,address]]H 將pattern space中的內容追加到hold space\n后
+ d:[address[,address]]d 刪除pattern中的所有行,并讀入下一行到pattern中
+ D:[address[,address]]D 刪除multiline pattern中的第一行,不讀入下一行
+ x:交換保持空間和模式空間的內容
+N:表示讀取下一行追加到pattern中
+n:表示讀取下一行到pattern中
命令練習:
1>給test文件里的每一行后加一空行
2>用sed模擬出tac的功能(倒序輸出)
解析逆序的過程:
如果是第一行的話,先讀取到pattern space,再將其拷貝到hold space,不是最
后一行的話,刪除pattern space 里的東西,在進行下次讀取,然后將hold里的內
容追加到pattern,在將pattern拷貝到hold,重復上述的過程,將將文件的內容逆
序了。
3>追加匹配行到文件結尾
4>行列轉換
5>求1~100的求和
6>打印奇偶行
7>1-100再求和
:a表示標簽a,ba表示跳轉到a標簽,$表示最后一行,!表示不做后續(xù)操作,所
以,$!ba表示最后一行不用跳轉到a標簽,結束此次操作。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網頁名稱:sed的工作原理及使用-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article44/dpeihe.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供自適應網站、響應式網站、定制開發(fā)、移動網站建設、網站收錄、面包屑導航
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容