Linux上文本處理三劍客sed

Sed是一種在線編輯器,行編輯器,一次處理一行內容,在處理時,把當前處理的行存儲在臨時緩沖區當中,該緩沖區稱為“模式空間”,接著用sed命令處理緩沖區中的內容,處理完畢后,把緩沖區的內容送到標準輸出:然后緊接著去處理下一行,重復完成相同的操作,直至文件末尾;sed處理的整個過程中,對象文件中的內容并沒有發生改變,除非使用重定向來存儲處理后的結果。sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作過程。

Sed所具有的功能有:數據的替換,刪除,新增等,這里的數據可以是一些關鍵字,也可以是一些特定的行??芍^sed的功能是非常豐富的,那我們就來具體了解下sed的用法。

sed 命令

簡介:
sed - stream editor for filtering and transforming text
格式:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
選項:
-n:不輸出模式空間內容的自動打印
-e: 多點編輯
-f:/PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i: 原處編輯

script:('地址命令')
   地址定界:
       (1) 不給地址:對全文進行處理
      (2)單地址:
               #: 指定的行
               /pattern/:被此處模式所能夠匹配到的每一行
       (3) 地址范圍:
               #,#
               #,+#
               /pat1/,/pat2/
               #,/pat1/
       (4) ~:步進
               1~2 奇數行
               2~2 偶數行
               
編輯命令:
    d: 刪除模式空間匹配的行
    p: 顯示模式空間中的內容
    a \text:在行后面追加文本;支持使用\n實現多行追加
    i\text:在行前面插入文本;支持使用\n實現多行插入
    c \text:替換行為單行或多行文本
    w /path/to/somefile: 保存模式匹配的行至指定文件
    r /path/from/somefile:讀取指定文件的文本至模式空間中匹配到的行后
    =: 為模式空間中的行打印行號
    !:模式空間中匹配行取反處理
    s///:查找替換,支持使用其它分隔符,s@@@,s###
         替換標記:
             g: 行內全局替換
             p: 顯示替換成功的行
             w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
示例:
sed‘2p’ /etc/passwd                    #顯示文件"passwd"中的內容,并打印第二行,因此第二行多顯示一次
sed –n ‘2p’ /etc/passwd                #僅顯示第二行
sed –n ‘1,4p’ /etc/passwd              #僅顯示第一到第四行
sed –n ‘/root/p’ /etc/passwd           #僅顯示匹配到的字符串‘/root/’的行
sed –n ‘2,/root/p’ /etc/passwd=        #從第二行開始匹配字符串‘/root/’的行,并僅顯示匹配到的行
sed -n ‘/^$/=’ file                    #僅顯示空行行號并打印行號
sed –n –e ‘/^$/p’ –e ‘/^$/=’ file      #僅顯示文件"file"中的空行,并打印行號
sed‘/root/a\superman’ /etc/passwd      #在匹配字符串‘/root/’的行后面追加內容"superman"
sed‘/root/i\superman’ /etc/passwd      #在匹配字符串‘/root/’的行前面追加內容"superman"
sed‘/root/c\superman’ /etc/passwd      #將匹配字符串‘/root/’替換成superman
sed‘/^$/d’ file                        #刪除文件"file"中的空行
sed‘1,10d’ file                        #刪除文件"file"中的1到10行
nl /etc/passwd| sed‘2,5d’              #顯示文件"passwd"中的第2到第5行;(nl相當于cat -b)
nl /etc/passwd| sed‘2a tea’            #在文件"passwd"中的第2后面追加內容"tea"
sed 's/test/mytest/g' example          #將匹配到的字符串"test"替換成"mytest" (g:為全局替換)
sed –n‘s/root/&superman/p’ /etc/passwd #將匹配到的字符串"root"替換成"rootsuperman",并僅顯示匹配到的行 (&:引用被替換的內容)
sed –n‘s/root/superman&/p’ /etc/passwd #將匹配到的字符串"root"替換成"supermanroot",并僅顯示匹配到的行
sed  -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets#將匹配到的字符串"dog"替換成"cat",將匹配到的字符串"hi"替換成"lo"
sed –i.bak ‘s/dog/cat/g’ pets          #將匹配到的字符串"dog"替換成"cat",并在替換之前將文件備份成pets.bak

sed 的高級編輯命令

h:把模式空間中的內容覆蓋至保持空間中
H:把模式空間中的內容追加至保持空間中
g:從保持空間取出數據覆蓋至模式空間
G:從保持空間取出內容追加至模式空間
x:把模式空間中的內容與保持空間中的內容進行互換
n:讀取匹配到的行的下一行覆蓋至模式空間
N:追加匹配到的行的下一行至模式空間
d:刪除模式空間中的行
D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed
示例:
sed -n 'n;p' FILE       #顯示偶數行
sed '1!G;h;$!d' FILE    #逆向顯示文件內容
sed '$!N;$!D' FILE      #取出文件后兩行;
sed '$!d' FILE          #取出文件最后一行;
sed 'G' FILE            #每行后面添加一行空白行
sed '/^$/d;G' FILE      #將空白行去重,僅顯示一行
sed 'n;d' FILE          #顯示奇數行;
sed -n '1!G;h;$p' FILE  #逆向顯示文件中的每一行;

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

(0)
AleenAleen
上一篇 2016-08-09
下一篇 2016-08-09

相關推薦

  • Linux中的cut、sort、uniq以及用戶(組)管理類指令應用示例

    Linux中的cut、sort、uniq指令 列出當前系統上所有已經登錄的用戶的用戶名,注意:同一用戶登錄多次,只顯示一次。 解決思路: 先使用who指令顯示出所有已登錄的用戶。然后對who指令的輸出進行切割得到想要的第一列內容,即只包含用戶名??梢允褂胏ut指令。最后對cut的結果進行排序并去重??梢允褂胹ort指令。   借助管道符,可以方便的…

    Linux干貨 2016-11-13
  • 五.Linux博客-2016年7月28日索引、硬鏈接、軟連接、inode表、file、重定向、tr、管道、用戶、組

    格式說明: 操作 概念 命令 說明及舉例 五.索引、硬鏈接、軟連接、inode表、file、重定向、tr、管道、用戶、組 索引節點 原數據保存在inode table表中每個文件或目錄都有一個獨立的inode number(節點編號在一個分區中是唯一的,每個分區都有自己的inode table) ls -i 查看節點編號 硬鏈接 ln&n…

    Linux干貨 2016-08-23
  • 【Linux基礎】文件管理類命令

    總結下linux系統文件管理類的命令 mkdir -> make dirtctories 創建目錄 語法:mkdir [OPTION]… DIRECTORY… 常用選項-p: 自動按需創建父目錄;-v: verbose,顯示詳細過程;-m MODE:直接給定權限;注意:路徑基名方為命令的作用對象;基名之前的路徑必須得存在;示例:~]# mkdir -p…

    Linux干貨 2018-03-11
  • 文件處理工具及正則表達式練習

    本節練習均在centos7系統下實現,部分練習只截取部分截圖,另外排版的事情我已經放棄了! 1.找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行 注:^ 行首, . 匹配任意單個字符,* 匹配前面的字符任意次 突然發現前面解法錯誤,沒有排除空格后加小括號的情況,下面是正確做法 2.統計last命令中…

    Linux干貨 2017-07-29
  • 磁盤管理的補充及擴展

    磁盤管理的補充及擴展 掛載點和/etc/fstab(配置文件) 使用mount命令掛載為臨時掛載開機重啟后就會自動卸載,為了永久掛載必須寫在配置文件中! 配置文件系統體系 ? 被mount、fsck和其它程序使用 ? 系統重啟時保留文件系統體系 ? 可以在設備欄使用文件系統卷標 ? 使用mount  -a 命令掛載/etc/fstab中的所有文件系…

    Linux干貨 2016-08-30
  • 自制一個小型Linux(附帶網絡功能)

      我們這次講述一下Linux啟動的啟動流程以及制作一個附帶網絡功能的mini linux 一、敘述 二、為什么要制作這么一個小型的系統 三、怎么制作 1、制作步驟 2、將虛擬機添加網絡功能 一、敘述   在制作一個小型的Linux之前,首先你得明白Linux系統的啟動過程,我們用一張圖來進行說明  二、為什…

    Linux干貨 2016-12-21
欧美性久久久久