文本處理工具之sed

                          文本處理工具之sed

1、sed是一種行編輯器,對文本逐行處理。處理時,它會將文本行載入"模式空間"(臨時緩沖區),接著用sed命令對模式空間的內容進行處理,處理完成后,將模式空間內容輸出到顯示屏
     與之類似的處理工具還有grep和awk,相比grep,sed不僅對文本有過濾功能,還可以對文本進行其他增刪改的操作。而相比awk,sed顯得更加簡單高效。下面我們就來細說"sed"。
2、用法:sed  [options]   '地址 指令’   file......
    options:一些功能選項
    地址:匹配范圍,可以是單行、多行,或者是匹配模式的行,模式支持正則表達式。
    指令:是sed自帶的文本處理命令,如打印、刪除、更改等。以下做詳細解釋
options
    -n      不打印模式空間         
    -e      多點編輯,同時處理多條指令   
    -f      讀取腳本文件          
    -r      使其支持擴展正則表達式     
    -i      直接修改原文件         
地址
    1       首行                                                      
    n       指定行                                                     
    $       尾行                                                      
    n1,n2       從n1到n2之間所有的行                                                
    n1,+10      從n1開始算起,之后的10行                                          
    /patter/        匹配該模式的行,支持正則                                            
    /pat1/,/pat2/   兩個匹配行之間的行,第一次匹配pat1,和第一次匹配part2之間的行。如果只匹配pat1,sed會打印pat1到行尾的所有行 
    n1~n2       ~代表步進,以n1為基準,n2為跳數匹配。如:1~2,就是打印奇數行                          
指令
    p       打印模式空間處理行和過濾行,常與-n一起使用,只打印過濾行
    d       刪除過濾行                       
    =       打印行號                        
    q       退出腳本                        
    r       讀取文件,通常與aic一起使用             
    w       將匹配內容輸出到文件                  
    a\text      在匹配行后追加文本                   
    i\text      在匹配行前面追加文本                  
    c\text      替換匹配行內容                     
    !       通常在 '地址' 后面,表示取反                
    &       引用前面的字符串                    
    s///(g|p|w) 查找替換                        


示例:
                打印匹配行
#sed -n '1p' /etc/passwd            ##打印首行
#sed -n '$p' /etc/passwd            ##打印尾行
#sed -n '1,3p' /etc/passwd          ##打印前三行
#sed -n '1,3!p' /etc/passwd         ##打印除前三行之外的行
#sed -n '/root/,3p' /etc/passwd     ##打印匹配root到第三行之間的行  
#sed -n '/postfix/,$p' /etc/passwd      ##打印匹配行到尾行之間的行
#sed -n -e '1p' -e '$p' /etc/passwd     ##使用-e命令同時處理多條指令
#sed '/root/a\########' /etc/passwd     ##行后追加
#sed '/root/i\########' /etc/passwd     ##行前追加
#sed '/root/c\########' /etc/passwd     ##替換匹配行

                刪除匹配行
#sed '1d' /etc/passwd           ##刪除首行
#sed '1~2d' /etc/passwd         ##刪除奇數行
#sed '10,$d' /etc/passwd        ##刪除10行以后的行

                文本替換
#sed -n 's/root/ROOT/p' /etc/passwd     ##將每行首次出現的root替換為ROOT,并打印過濾行
#sed -n 's/root/ROOT/2p' /etc/passwd    ##將文本行中第二次出現的root替換為ROOT,打印該行
#sed -n 's/root/ROOT/gp' /etc/passwd    ##將全文出現的root全部替換成大寫,并打印過濾行
#sed -n 's/bin/&2/gp' /etc/passwd       ##全文搜索,將bin替換成bin2,打印這些行

                實用的應用場景
#sed '/^#/d;/^$/d' /etc/fstab               ##去掉/etc/fstab中空行和以#開頭的行
#sed -r 's@([^:]+):(.*):([^:]+)@\3:\2:\1@' /etc/passwd  ##將/etc/passwd文件中用戶名和默認shell替換位置
--------上述示例,很好的利用了正則的分組匹配
--------([^:]+)表示匹配(非:字符一次以上)
#sed '10,$s/^/#/' /etc/passwd               ##為10行及其之后的行添加#注釋符

3、sed高級功能
    sed除了以上基本的文本處理能力外,還具備一些高級用法。
    保持空間:和模式空間一樣,也是在sed命令執行的時候,內存給其分配的一塊緩沖空間。相比模式空間,保持空間只是一塊臨時存儲空間,其內容不會直接被sed命令處理輸出到屏幕
    高級編輯命令
    h       將模式空間內容覆蓋至保持空間  
    H       將模式空間內容追加至保持空間  
    g       將保持空間內容覆蓋模式空間   
    G       將保持空間內容追加至模式空間  
    x       將保持空間內容和模式空間互換  
    n       讀取匹配行的下一行覆蓋至模式空間
    N       讀取匹配行的下一行追加至模式空間 
文本處理工具之sed 如圖:
    h:執行h命令,保持空間內容將變為a。
    H:執行H命令,保持空間內容將變為a\nb\nc\n
    g:執行g命令,模式空間將變為b\nc
    G:執行G命令,模式空間內容變為a\nb\nc
    x:執行x命令,模式空間內容變為b\nc,保持空間內容變為a  二者互換
    n:執行n命令,模式空間內容直接變為d,a直接覆蓋,不做任何處理
    N:執行N命令,模式空間內容將變為a\nd
示例  (如上圖,txt為a b c d e f  六行內容)
#sed -n 'n;p'  txt      該命令打印txt偶數行 
b
d
f
#sed '1!G;h;$!d'  txt   ##1!G:表示只要不是第一行,都執行G命令。$!d:表示只要不是最后一行,都執行d命令
f
e
d
c
b
a   
#sed '$!N;$!D' txt  ##$!N:表示只要不是最后一行就執行N命令;$!D:表示只要不是最后一行就執行D命令
e
f
#sed -n '1!G;h;$p'  txt ##1!G:表示只要不是第一行就執行G命令,$p:表示最后一行執行p命令
f
e
d
c
b
a

綜上:sed命令操作簡潔、高效,是linux下必學文本處理工具之一,靈活掌握sed用法,對編寫腳本起到很大的幫助

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

(0)
AbigheartAbigheart
上一篇 2017-03-17
下一篇 2017-03-18

相關推薦

  • linux 中的 文本處理工具

    文本處理工具  在linux系統中 文本工具有很多 現在具體介紹幾款 如 抽取文本的工具 和文件三劍客  文件內容:less和 cat   文件截?。篽ead和tail   按列抽?。篶ut   按關鍵字抽取:grep egrep 首先 有 查看文件的cat tac  cat [OPTION]&#8…

    Linux干貨 2016-08-11
  • 文件查找命令(find、locate)

    在文件系統上查找符合條件的文件: 實現工具:locate, find locate: 依賴于事先構建好的索引庫; 系統自動實現(周期性任務); 手動更新數據庫(updatedb); 工作特性: 查找速度快; 模糊查找; 非實時查找; locate [OPTION]… PATTERN… -b:只匹配路徑中的基名; -c:統計出共有多少個符合條件的文件;…

    Linux干貨 2016-11-06
  • 程序包管理初步

    升級:       rpm {-U|–upgrade} [install-options] PACKAGE_FILE …                -U:升級或安裝;       rpm {-…

    Linux干貨 2016-12-31
  • sed vim小練

     1 、刪除/etc/grub2.conf 文件中所有以空白開頭的行行首的空白字符  2 、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空 白字符的行的行首的#和空白字符 3 、在/root/install.log 每一行行首增加# [root@localhost ~]# sed -n&nbsp…

    Linux干貨 2016-08-12
  • 計算機硬件及Linux簡介

    計算機的組成 計算機主要分成五大部分:輸入單元、控制單元、運算單元、存儲器、輸出單元。 其中,中央處理器(CPU)是一個具有特定功能的芯片,含有微指令集。包括控制單元與運算單元。 控制單元對程序進行控制,調度程序、數據、地址。運算單元負責對數據的各種邏輯運算和數字運算。 計算機的功能 包括但不限于 驅動程序:字面意思。 進程管理:計算機內部能夠通過分配資源,…

    Linux干貨 2016-10-30
  • 進程管理

    進程管理 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能 用戶模式(空間),內核模式(空間) Process(進程):運行中的程序的一個副本         存在生命周期 task struct:內核的結構體 Linux內內核存儲進程信息的固定格式:tas…

    Linux干貨 2016-09-10

評論列表(1條)

  • N24_Jerry
    N24_Jerry 2017-04-20 17:07

    通俗易懂,邏輯清晰,循環漸進,實乃經典中的經典?。?/p>

欧美性久久久久