初學Linux之文本處理sed

Sed介紹;Sed用法;Sed高級用法

Sed介紹

?SED,Stream EDitor,行編輯器。
?sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空模式空間,但不會清空保留空間。這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。
?功能:主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。

sed和之前出現的grep、vim等文本編輯工具是不同的,vim是交互式操作的,sed是非交互式的。sed能夠根據給定的條件自動的逐行處理文件。grep也是逐行非交互的處理,grep主要是將匹配到的內容打印顯示,并沒有進行數據的更改。sed對匹配到的數據進行修改和調整,更加靈活的顯示用戶需要的內容,同時對部分內容進行更改。

sed具體的功能包括:數據的替換、刪除、新增等,這里的數據可以是一些關鍵字,也可以是一些特定的行。

Sed用法

用法:
sed [option]… ‘script’ inputfile…
?常用選項:
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯( -e script1 -e script2 -e script3;)
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak: 備份文件并原處編輯,-i 直接修改源文件
?script:
‘地址命令’? 使用定位地址的方法,指明要操作的行,進入模式空間,腳本是必須要有的。

地址定界:
(1) 不給地址:對全文進行處理
(2) 單行定位:
#: 用數字指定的行,$:最后一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 行到行范圍定位:
n,m:都是數字定位的,表示從n到m行。
n,+m:都是數字,表示從n到 n+m行。
/pat1/,/pat2/:一般是正則表達匹配的字符串,從文本掃描時先掃描1,再掃描2,這個結束,還有文本,就重新再次掃描1,掃描到了,就操作,同時進行掃描2,若是2到結束也沒有掃描到,那就將剩下的全部操作。
#,/pat1/:第一個是數字,后面是正則表達匹配,由于行數是不會重復的,所以,會自動的到第一個匹配到的 pat1,結束。
(4) ~:步進
1~2 奇數行 ?? 從第一行開始,兩個作為一個循環,每個循環的第二個進行操作
2~2 偶數行 ? 從第二行開始,兩個作為一個循環,每個循環的第二個進行操作

編輯命令:
d: 刪除模式空間匹配的行,并立即啟用下一輪循環
p:打印當前模式空間內容,追加到默認輸出之后
a [\]text:在指定行后面追加文本
支持使用\n實現多行追加,追加是換行追加
i [\]text:在行前面插入文本
c [\]text:替換行為單行或多行文本

后續不能添加操作
w /path/somefile: 保存模式匹配的行至指定文件。若是要繼續操作,建議使用-e
r /path/somefile:讀取指定文件的文本至模式空間中。同上
匹配到的行后
=: 為模式空間中的行打印行號
!:模式空間中匹配行取反處理

s///:查找替換,支持使用其它分隔符,s@@@,s###
? ? ? ? ?? 替換標記:
g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

sed示例
?sed –n ‘2,/root/p’ /etc/passwd 從2行開始
?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 -n -e ‘/^$/p’ -e ‘/^$/=’ /etc/fstab 和 sed -n? ‘/^$/p;/^$/=’ /etc/fstab 結果是一樣的。

使用時注意分號隔開的方法

Sed高級用法

sed 工作機制是每次讀取一行文本至“模式空間”中,在模式空間中完成處理,將處理結果輸出至標準輸出設備,在模式空間中處理一行內容后會雞西處理下一行,那么對于處理過的行可能還有其他的處理,因此可以把處理過的行“傳送”至保持空間中,然后再后續的處理中再次“傳送”回模式空間中。這樣將類似加工車間和倉庫的概念,模式空間是加工車間,保持空間是倉庫,而倉庫中存儲的是些半成品。

高級編輯命令
?P:打印模式空間開端至\n內容,并追加到默認輸出之前;
?h: 把模式空間中的內容覆蓋至保持空間中;
?H:把模式空間中的內容追加至保持空間中內容的后面;
?g: 從保持空間取出數據并覆蓋至模式空間;
?G:從保持空間取出內容并追加至模式空間;
?x: 把模式空間中的內容與保持空間中的內容進行互換;
?n: 讀取匹配到的行的下一行覆蓋至模式空間(覆蓋原有內容);已經讀取的行不會再次讀取
?N:讀取匹配到的行的下一行追加至模式空間內容后面;已經讀取的行不會再次讀取
?d: 刪除模式空間中的內容
?D:刪除模式空間中的首行。

注意:命令功能可以使用 !取反,;分號用于分隔腳本。

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

(2)
hack王和juhack王和ju
上一篇 2018-01-20 16:54
下一篇 2018-01-21

相關推薦

  • 壓縮及解壓縮工具

    壓縮和解壓縮工具      壓縮比      目的:時間換空間      CPU的時間 –> 磁盤空間 常見的壓縮及解壓縮工具: compress/uncompress, .Z gzip/gunzip, .gz bzip2…

    Linux干貨 2016-08-22
  • Linux系統grep正則表達式

    一、grep命令的使用 首先,我們來了解grep命令,grep (global search regular expression and printing),全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。Linux中的grep命令包括、grep, egrep和fgrep 。egrep是grep…

    Linux干貨 2017-04-23
  • 推薦-運維學習筆記-Puppet應用配置的工作原理

    背景知識 Puppet的核心功能是配置管理。一般來說,用戶在master上集中做配置,同時,被管理節點上的agent會定期從master上下載配置數據,再應用(apply)到本地,從而使管理節點的狀態(用戶,組,文件,安裝包,服務等的設置和運行狀態)與masters上定義的保持一致。 有時,出于測試的目的,并不希望真的應用配置,那么就需要執行puppet a…

    2016-06-01
  • find 的使用及練習

    find是個使用頻率比較高的命令。常常用它在系統特定目錄下,查找具有某種特征【名字類型屬主權限等】的文件。find命令的格式: find  [-path ..] -options [-print -exec -ok] path:要查找的目錄路徑。 ~ 表示$HOME目錄 . 表示當前目錄 / 表示根目錄 -print :表示將結果輸出到標準輸出-e…

    Linux干貨 2017-06-11
  • linux第一周學習

      一周過去了,這周學習并新認識了不少內容。由一開始的萌逼狀態,逐步清晰的認識了不少內容。相信我會越來越好的。 文件與目錄 touch touch newfile         創建空文件touch oldfile          更新文件的三個…

    Linux干貨 2017-09-02
  • linux文件系統掛載

    掛載mount 掛載:     將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為 卸載:     為解除此關聯關系的過程 把設備關聯掛載點:mount Point mount 卸載時:    &…

    Linux干貨 2016-08-29
欧美性久久久久