sed文本處理器

文本處理三劍客之一

sed(Stream Editor)簡介:

sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(patternspace),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕(STDOUT)。然后讀入下行,執行下一個循環。如果沒有使諸如’D’的特殊命令,那會在兩個循環之間清空模式空間,但不會清空保留空間。這樣不斷重復,知道文件末尾。文件內容并沒有改變,除非使用重定向存儲輸出。

sed與我們常用的vim的區別:

sed是非交互式的,而vim是交互式的,這意味著必須將要數據執行的命令插入到命令行或要處理的腳本中。Sed在一個文件或文件集中非交互式、并且不加詢問地接收一系列的命令并執行它們。sed的強大之處就是可以對文件或者文件集批量的進行刪除、替換、插入追加等操作,并且非常適合于重復的編輯,這種重復編輯如果由人工完成將花費大量的時間。

sed功能:

主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等

sed用法:

sed [option]… ‘script’ inputfile…

常用選項(option)

-n 使用安靜(silent)模式.sed默認的處理結果是輸出到STDOUT。但是如果加上-n參數后,則只有經過sed特殊處理的哪一行或者動作才會被別出來(與‘p’連用)

-e 直接在指令列模式上進行sed的動作編輯(多點編輯,可同時執行多條操作命令)

-f 直接將sed的動作寫在一個文件內,-f filename則可以執行filename內的sed動作

-r 支持使用擴展正則表達式

-i 直接修改讀取的文件內容,而不是由STDOUT輸出

-i.bak 備份文件并原處編輯

script:

‘地址命令’

地址界定:

1、不給地址:對全文進行處理

2、單地址:

#:指定的行,$: 最后一行

/pattern/: 被此處模式所能夠匹配到的每一行

3、地址范圍

#,# 從某一行到某一行

#,+# 從某一行到該行后的第幾行

/pat1/,/pat2/ 從pat1匹配到的行到pat2匹配到的行

#,/pat1/ 從某一行到匹配到pat1的行

4、~: 步進

1~2 奇數行

2~2 偶數行

編輯命令:

d: 刪除模式空間匹配的行,并立即啟用下一輪循環

p: 打印當前模式空間內容,追加到默認輸出之后

a [\]text: 在指定行后面追加文本,支持使用\n實現多行追加

將 this is a test line 追加到 以test 開頭的行后面:

sed ‘/^test/a\this is a test line’ file

在 test.conf 文件第2行之后插入 this is a test line:

sed -i ‘2a\this is a test line’ test.conf

i [\]text:在行前面插入文本

將 this is a test line 追加到以test開頭的行前面:

sed ‘/^test/i\this is a test line’ file

在test.conf文件第5行之前插入this is a test line:

sed -i ‘5i\this is a test line’ test.conf

c [\]text:替換行為單行或多行文本

w /path/somefile: 保存模式匹配的行至指定文件

r /path/somefile: 讀取指定文件的文本至模式空間中匹配到的行后

=:為模式空間中的行打印行號

!:模式空間中匹配行取反處理

s///: 查找替換,支持使用其他分隔符,s@@@,s###

替換標記

g: 行內全局替換

p: 顯示替換成功的行

w /PATH/TO/SOMEFILE: 將替換成功的行保存至文件中

sed元字符集:

^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行。

$ 匹配行結束,如:/sed$/匹配所有以sed結尾的行。

. 匹配一個非換行符的任意字符,如:/s.d/匹配s后接一個任意字符,最后是d。

* 匹配0個或多個字符,如:/*sed/匹配所有模板是一個或多個空格后緊跟sed的行。

[] 匹配一個指定范圍內的字符,如/[ss]ed/匹配sed和Sed。

[^] 匹配一個不在指定范圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。

\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替換成lovers。

& 保存搜索字符用來替換其他字符,如s/love/**&**/,love這成**love**。

\< 匹配單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行。

\> 匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。

x\{m\} 重復字符x,m次,如:/0\{5\}/匹配包含5個0的行。

x\{m,\} 重復字符x,至少m次,如:/0\{5,\}/匹配至少有5個0的行。

x\{m,n\} 重復字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10個0的行。

sed示例:

sed ‘2p’ /etc/passwd 輸出所有內容并第二行多顯示一次

sed -n ‘2p’ /etc/passwd 輸出第二行

sed -n ‘1,4p’ /etc/passwd 輸出1至4行

sed -n ‘/root/p’ /etc/passwd 顯示包含root的行

sed -n ‘2,/root/p’ /etc/passwd 從第二行開始

sed -n ‘/^$/=’ file 顯示空行行號

sed -n -e ‘/^$/p’ -e ‘/^$/=’ file? 先輸出空行,然后輸出空行行號

sed ‘/root/a\superman’ /etc/passwd 行后

sed ‘/root/i\superman’ /etc/passwd 行前

sed ‘/root/c\superman’ /etc/passwd 代替行

sed ‘/^$/d’ file 刪除空行

sed ‘1,10d’ file 刪除1至10行

nl /etc/passwd | sed ‘2,5d’ 刪除2至5行

nl /etc/passwd | sed ‘2a tea’ 第二行最后添加tea

sed -n ‘s/root/&superman/p’ /etc/passwd 單詞前

sed -n ‘s/root/superman&/p’ /etc/passwd 單詞后

sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets 搜索dog替換成cat,然后搜索hi替換成lo

sed -i.bak ‘s/dog/cat/g’ pets 備份文件pets.bak 將原文件中的dog替換成cat

高級編輯命令:

P:打印模式空間開端至\n內容,并追加到默認輸出之前

h:把模式空間中的內容覆蓋至保持空間中

H:把模式空間的內容追加至保持空間中

g:從保持空間取出數據覆蓋至模式空間

G:從保持空間取出數據追加至模式空間

x:把模式空間中的內容與保持空間的內容進行互換

n:讀取匹配到的行的下一行覆蓋至模式空間

N:讀取匹配到的行的下一行追加至模式空間

d:刪除模式空間中的行

D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,并不會讀取新的輸入行,而使用合成的模式空間重新啟動循環。如果模式空間不包含換行符,則會像發出d命令那樣啟動正常的新循環

sed示例:

sed -n ‘n;p’ FILE 偶數行

sed ‘1!G;h;$!d’ FILE 倒序

sed ‘N;D’ FILE 最后一行

sed ‘$!N;$!D’ FILE 最后兩行

sed ‘$!d’ FILE 最后一行

sed ‘G’ FILE 每行后面加一行空行

sed ‘g’ FILE 每行被空行替換

sed ‘/^$/d;G’ FILE 先把空行刪除,然后在每一行的后面添加一行空行

sed ‘n;d’ FILE 奇數行

sed -n ‘1!G;h;$p’ FILE 倒序

想了解更多sed的用法可以查看下面的網址:

http://www.gnu.org/software/sed/manual/sed.html

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89793

(1)
ChaogGeChaogGe
上一篇 2017-12-10
下一篇 2017-12-10

相關推薦

  • 計算機的組成及Linux簡單介紹

    馬哥教育網絡班22期第一周練習 計算機概述 進入計算機的世界 計算機 計算機(computer)俗稱電腦,是能夠按照程序運行,自動、高速出爐海量數據的現代化智能電子設備。由硬件系統和軟件系統所組成,計算機的組成遵循馮諾依曼體系??煞譃槌売嬎銠C、工業控制計算機、網絡計算機、個人計算機和嵌入式計算機等五類,較先進的計算機有生物計算機、光子計算機、量子計算機等?!?/p>

    Linux干貨 2016-08-14
  • Week4 正則表達式及grep命令

    基本正則表達式元字符:             字符匹配:                …

    Linux干貨 2017-02-11
  • 初識linux:計算機的組成及功能

    一、描述計算機的組成及功能。 由馮諾伊曼提出計算機體系結構(5大部件)控制器(Controller):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。 (cpu由控…

    2017-12-03
  • 基于Keepalived構建高可用集群配置實例(HA Cluster)

    什么是集群 簡單的講集群(cluster)就是一組計算機,它們作為一個整體向用戶提供一組網絡資源。這些單個的計算機系統就是集群的節點(node)。一個理想的集群是,用戶從來不會意識到集群系統底層的節點,在他/她們看來,集群是一個系統,而非多個計算機系統。并且集群系統的管理員可以隨意增加和刪改集群系統的節點。 關于更詳細的高可用集群我們在后面再做詳解…

    Linux干貨 2016-11-03
  • Linux中實現java和c語言打印Hello world小程序

    1、C語言實現 先確認linux系統中是否gcc編譯器,可以通過rpm -q gcc查詢系統已經安裝gcc軟件包,如果沒有安裝可以到系統自帶光盤里面安裝相應的安裝包軟件。 使用rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm安裝編譯器,安裝后再查詢確認已經成功 環境準備好了,我們就可以編寫C語言的代碼了,我們可以使用vim編輯器編寫第一…

    Linux干貨 2016-08-26
  • Linux發展史

    獨白:    先來說說我對Linux的認識吧,用一個成語形容:狗屁不通,想了一下,文明社會還是和諧點比較好,算是聞所未聞吧。15年初從朋友那得知Linxu,沖著他那十幾K的工資還是挺心動的,說實在很仰慕他,有點計算機基礎,自學兩個月出山,當時月薪8k;而我還是拿著3,4k的工資,也沒什么本領,于是找他要了些有關視頻資料,也開始了自學之路,…

    Linux干貨 2017-04-08
欧美性久久久久