強大的編輯查找命令---sed


sed(stream editor流編輯器)

        sed是一種幾乎包括全部 UNIX平臺的輕量級編輯器。sed主要是用來將數據進行選取。替換。刪除。功能很強大。來看看介紹:        正則表達式

        sed是逐行(行編輯器,記住,一行讀取一次,對行編輯。必定要記住這個概念!)讀取至內存,這個內存空間也叫模式空間,在模式空間中處理後將模式空間打印至屏幕。可是默認不對原文件處理。在模式空間中能夠進行進行模式匹配和編輯操做。模式空間中的內容可再次放入保持空間,進行編輯。express

        須要注意的是sed命令中有沒有匹配到默認都會打印至屏幕,除非對其編輯。編輯後根據編輯命令也會打印到屏幕上,或者靜禁止輸出。 vim

        vim只能修改文檔,sed能夠從管道里接受任何數據進行編輯。編輯器



sed    [OPTION]...  'script'  [input-file] ...  [選項]  '[編輯命令]' 文件名ide

選項:spa

   -n 禁止默認顯示行爲,只保留編輯後的行爲,在不使用d命令的狀況下通常都要使用。不輸出模式空間中的內容至屏幕;code

   -e   script --expression=script:容許對輸出數據應用多條sed命令編輯。若是寫下一行用\分割下一行也-e,若是寫在一行上直接-e編輯。regexp

   -i  sed的修改結果直接修改讀取數據的文件。而不是由屏幕輸出。(輸出數據和文件數據都改)orm

   -r  --regexp-extended 表示使用擴展正則表達式。ip

   -f PATH/TO/SED_SCRIPT_FILE    經過讀取腳本,每行執行一個sed編輯命令,;

script:  '/地址定界或PATTERN/編輯命令'

地址定界:

   (1) 空地址:對全文進行處理;

   (2) 單地址:

           #:指定行;

           /pattern/:被此模式所匹配到的每一行;    

   (3) 地址範圍

       #,#:

       #,+#:

       #,/pat1/

       /pat1/,/pat2/   //從第一次被匹配到的行開始第二次匹配到的行結束。

       $:最後一行;

   (4) 步進:~

       1~2:全部奇數行; 2~2:全部偶數行;

編輯命令:  

    a \string  在文本後追加string\n 可用於換行,實現多行追加;

    c \string  行替換 ,把匹配到的行替換爲此處指定的string,換行每行後加「\n」;

    i \string   在行前插入。一行或多行,除最後與一行,每行後加  \n

    d   刪除模式空間中內容。整行刪除。

    p 打印,顯示模式空間中的內容,輸出指定行。

    w  /PATH/TO/SOMEFILE: 保存模式空間匹配到的行到指定文件。

    r   /PATH/TO/FILE 將指定的文件的內容內的添加至模式匹配的行後面,文件合併。

    =:爲模式匹配到的行打印行號;

    !:條件取反:地址定界!編輯命令;

    s /pattern/string/字符串查找替換,分隔符不用要操做的分隔符,其餘符號看成分隔符也行,格式爲「幾行s/舊字符串/新字符串/g

   替換標記:

       g:全局替換;

       i: 忽略字符大小寫;

       w:/PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;

       p 顯示替換成功的行;

高級編輯命令:

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

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

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

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

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

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

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

   d  :刪除模式空間中的行;

   D:刪除多行模式空間中的全部行;





舉例:

sed  '2a  \hello'  student.txt  //在第二行以後追加hello
sed '2i  hello \  world' student.txt  //在第二行以前插2行數據 hello(第一行) world(第二行)  
sed  '4s/99/55/g’ student.txt     //把4行的99換成55
sed  '/oot/d'  /etc/fstab  //刪除oot在/etc/fstab
sed  '/^\//p'  /etc/fstab  顯示/開始的行 
sed  '/^\//a \abc'     /etc/fstab  /開頭的行後追加abc
sed '/oot/w  /tmp/oot.txt'  /etc/fstab     有oot的一行保存至/tmp/oot.txt目錄下,處理文件/etc/fatab
sed  's#l\(..e\)#L\1#g' sed.txt  把l...e中的l換爲大寫。
sed -n 'n;p' /etc/fstab   顯示偶數行,;
sed  '1!G;h;$!d'  FILE    逆序顯示文件內容
sed ‘!d’FILE  顯示最後一行
sed ‘$!N;$!d’FILE  最後兩行
sed ‘/^$/d;G’  刪除原有的全部空白行,然後爲全部空白行後添加一個空白行;
sed ‘n;d’FILE; 顯示奇數行,按行讀取的。
sed ‘G’FILE  在原有行後添加空白行;
echo「/etc/fstab」|sed '@[^/]\+/\?$@@'  取出基名
相關文章
相關標籤/搜索