Linux的文本處理工具之sed的使用

Sed文本處理工具

一、認識sed工具:

sed是一種流編輯器,一次處理一行內容。當進行處理時,把當前處理的行存儲在臨時的緩沖區中(俗稱“模式空間”)后,再用sed命令去處理緩沖區的內容,最后把處理過的緩沖區內容送往屏幕打印顯示。接著處理下一行,不斷重復進行讀取、處理、輸出,直到文件末尾。 

注:sed命令處理文本,文件內容本身并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等 

二、使用man幫助了解sed的使用格式和常用的選項(#man sed):

NAMEsed的介紹)

sed – stream editor for filtering and transforming text 

SYNOPSISsed的格式使用)

sed [OPTION]… {script-only-if-no-other-script} [input-file]…

注:“script”為‘地址命令’ 

DESCRIPTIONsed的常用選項,如下挑選的選項使用上比較多,其他選項請查閱man幫助)

-n, –quiet, –silent  靜默模式,不將模式空間內容輸送到屏幕上打印。

suppress automatic printing of pattern space 

-e script, –expression=script   多點編輯。

add the script to the commands to be executed 

-f script-file, –file=script-file 從指定的文件中讀取已經編輯好的腳本。

add the contents of script-file to the commands to be executed

–follow-symlinks

follow symlinks when processing in place 

-i[SUFFIX], –in-place[=SUFFIX]   在原文本處編輯(此處選項不建議使用,如果實在是要在原處編輯,請做好數據備份后再操作,以免數據的丟失。)

edit files in place (makes backup if SUFFIX supplied) 

-r, –regexp-extended  支持擴展正則表達式的使用。

use extended regular expressions in the script.

三、了解sed的簡單編輯命令以及高級編輯命令:

1、  簡單編輯命令:

d: 刪除模式空間匹配的行

p: 顯示模式空間中的內容

a \text:在行后面追加文本;支持使用\n實現多行追加

i \text:在行前面插入文本;支持使用\n實現多行插入

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

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

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

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

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

2、  高級編輯命令:

高級編輯命令:

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

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

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

G:從保持空間取出內容追加至模式空間

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

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

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

d: 刪除模式空間中的行

D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

四、上面了解到sed是文本行處理的流編輯器,那么sed是如何定位要修改的內容呢?那么下面一起來學習sed的地址定界和查找替換:

1、地址定界:

(1) 不給地址:對全文進行處理。

(2) 單地址:

#: 指定的行

/pattern/:被此處模式所能夠匹配到的每一行(模式空間)。

(3) 地址范圍:

#,#    指定從第幾行開始到第幾行結束進行處理。

#,+#   指定從第幾行開始,往后需要處理多少行。

/pat1/,/pat2/   模式空間定界。指定從第一個被模式空間匹配到開始,直至到被第二個模式空間匹配到結束來進行處理。

#,/pat1/   指定行與模式空間的配合使用;指定從第幾行開始,到被模式空間匹配到的行進行處理。

(4) ~:步進

1~2 奇數行  只處理文本內容中的奇數行

2~2 偶數行  只處理文本內容中的偶數行

如下圖:分別將文本內容中的奇數行或者偶數行刪除掉

blob.png

2、查找與替換:

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

替換標記:

g: 是行內全局替換

p: 將顯示替換成功的行

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

學習了上面的理論講述,下面進行相應的事例演示:

1、簡單編輯命令的使用:

sed ‘2p’ /etc/passwd  打印文本內容中的第二行并把文本的原內容一起輸送到屏幕顯示,可結合靜默模式的選項-n配合使用(如下一事例題)

blob.png

sed -n ‘2p’ /etc/passwd

blob.png

sed -n ‘1,4p’ /etc/passwd 在屏幕上打印顯示文本內容中的第一行到第四行的內容。

blob.png

sed -n ‘/root/p’ /etc/passwd 只打印顯示被模式空間匹配到的行

blob.png

sed -n ‘2,/root/p’ /etc/passwd 2行開始,到被模式空間匹配到之間的所有行

blob.png

sed -n ‘/^$/=’ /testdir/issue 顯示空行行號(如下圖,原文本中第三行為空行)

blob.png

sed -n -e ‘/^$/p’ –e ‘/^$/=’ /testdir/issue 打印空行的行號和空行;多點編輯

blob.png

sed ‘/root/a\superman’ /etc/passwd  在被模式空間匹配到的行后新增一行打印Superman

blob.png

sed ‘/root/i\superman’ /etc/passwd  在被模式空間匹配到的行前新增一行打印Superman

blob.png

sed ‘/root/c\superman’ /etc/passwd  將被模式空間匹配到的行全部替換成了Superman

blob.png

sed ‘/^$/d’ /testdir/issue   將文本中的空行全部刪除掉

blob.png

sed ‘1,10d’ /testdir/passwd 將文本中的前十行刪除掉,只打印顯示剩余的行

blob.png

nl /etc/passwd| sed‘2,5d’ 給文本加以顯示行號,并刪除第二行到第五行的內容

blob.png

nl/ etc/passwd| sed‘2a tea’  給文本加以顯示行號,并給第二行后新增一行插入單詞tea

blob.png

sed 's/nologin/csh/g' /testdir/passwd  在文本中全局查找nologin,并將其替換成csh

blob.png

sed -n‘s/root/&superman/p’ /etc/passwd在被模式空間匹配到的單詞后面增加Superman

blob.png

sed -n‘s/root/superman&/p’ /etc/passwd 在被模式空間匹配到的單詞前面增加Superman

blob.png

2、高級編輯命令的使用:

sed -n 'n;p' /testdir/ff  打印偶數行

blob.png

sed '1!G;h;$!d' /testdir/ff  逆序顯示

blob.png

sed '$!N;$!D' /testdir/ff 打印最后兩行

blob.png

sed '$!d' /testdir/ff 打印最后一行

blob.png

sed ‘G’ /testdir/ff  打印所有的行,并在每一行的后面增加一個空行

blob.png

# sed 'g' /testdir/ff 打印空白行

blob.png

sed -n '1!G;h;$p' /testdir/ff  同樣是逆序打印

blob.png

# sed '/^$/d;G' /testdir/ff 

blob.png

原創文章,作者:Aaron_wang,如若轉載,請注明出處:http://www.www58058.com/32037

(0)
Aaron_wangAaron_wang
上一篇 2016-08-10
下一篇 2016-08-10

相關推薦

  • Linux Basics–part3

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 ~]# who | cut -d” ” -f1 | sort -u centos ronny root 或 ~]# who | cut -d” ” -f1 | sort |uniq centos ronny root 2…

    Linux干貨 2017-08-07
  • Linux命令1

    7-13 Linux命令   一、進入終端terminal 1..C1trl+Alt 釋放鼠標 2.ifconfig 查詢ip地址 3.Ping (IP地址) 查看聯網狀態 4.ls 查看            -l 列出文件 5.tty、who am i  查看當前的登錄終端名…

    Linux干貨 2017-07-15
  • openvpn安裝配置過程

    前言     之前為了方便遠程辦公時訪問公司的內部系統,如:svn、OA、wiki、禪道等等;通通在防火墻上做了端口映射。然后有個內部系統被黑了,各種弱口令沒辦法。果斷關閉端口映射,看來還是得搭建個VPN服務器,vpn設備感覺大材小用。馬上就想到了開源的openvpn,下面就來介紹openvpn的安裝配置過程。 ope…

    Linux干貨 2015-05-11
  • 第十七周 作業–結合圖形描述lvs原理

        LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。   Lvs有三種模式分別是lvs-nat、lvs-dr、lvs-tun。下面分別介紹lvs-nat、lvs-dr…

    Linux干貨 2016-12-07
  • Linux之任務計劃 crontab

    Linux之任務計劃    用過windows的同學應該都知道在控制面板中有一個“任務計劃”選項,我們可以通過向導設置讓計算機在某個時間點或者開機時運行某個腳本或者批處理等等,方便我們的日常管理監視工作;同樣在Linux系統中,如果我們想在開機時就運行某個操作,可以直接將命令寫入/etc/rc.local中,該操作就會在機器開機時運行;如…

    Linux干貨 2015-05-18

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-10 10:43

    架構清晰,思路清晰,有理論有時間。排版需要改進,對小標題或二級標題可以適當的進行一些字體上的調整。

欧美性久久久久