Sed命令

  1.簡介

       模式空間,sed是非交互式的編輯器。它不會修改文件,除非使用shell重定向來保存結果。默認情況下,所有的輸出行都被打印到屏幕上。

  2.格式規範:
       sed [options] 'AddressCommand' file ...
    解析: 
     2.1 options(選項):

 選項  功能
 -e  進行多項編輯,即對輸入行應用多條sed命令時使用
 -n  取消默認的輸出
 -f  指定sed腳本的文件名
   
    2.2Address:
      1、StartLine,EndLine
      如:刪除第3行到最後一行  
           [root@tang ~]# sed "1,$d" /etc/fstab
       
      2.、/RegExp/ -->/^root/
      如:包含oot就刪除 
           [root@tang ~]# sed '/oot/d' /etc/fstab
      
      3、/pattern1/,/pattern2/
          第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的所有行
     
      4、LineNumber
          指定的行

       5、StartLine, +N
           從startLine開始,向後的N行;
          [root@tang ~]# sed "1,+2d" /etc/fstab

     2.3 Command:   
 命令  功能
 a\

 在當前行後添加一行或多行。多行時除最後一行外,每行末尾需用“\”續行

 c\  用此符號後的新文本替換當前行中的文本。多行時除最後一行外,每行末尾需用"\"續行
 i\  在當前行之前插入文本。多行時除最後一行外,每行末尾需用"\"續行
 d  刪除行
 h  把模式空間裏的內容複製到暫存緩衝區
 H  把模式空間裏的內容追加到暫存緩衝區
 g  把暫存緩衝區裏的內容複製到模式空間,覆蓋原有的內容
 G  把暫存緩衝區的內容追加到模式空間裏,追加在原有內容的後面
 l  列出非打印字符
 p  打印行
 n  讀入下一輸入行,並從下一條命令而不是第一條命令開始對其的處理
 q  結束或退出sed
 r  從文件中讀取輸入行
 !  對所選行以外的所有行應用命令
 s  用一個字符串替換另一個
 g  在行內進行全局替換
   
 w  將所選的行寫入文件
 x  交換暫存緩衝區與模式空間的內容
 y  將字符替換爲另一字符(不能對正則表達式使用y命令)

        d: 刪除符合條件的行;sed '1,2d' /etc/xx ;
p: 顯示符合條件的行;
a \"string": 在指定的行後面追加新行,內容爲string
\n:可以用於換行
>:sed '/^\//a \# hello word' /fstab2 
i \string: 在指定的行前面添加新行,內容爲string
r FILE: 將指定的文件的內容添加至符合條件的行處
>:sed '1r etc/issue' /etc/fstab 
w FILE: 將地址指定的範圍內的行另存至指定的文件中;
>:sed '/oot/w /tmpoot.txt' /etc/fstab 
s/pattern/string/修飾符: 查找並替換,默認只替換每行中第一次被模式匹配到的字符串
 >: sed 's/^\//#/'  /fstab2      (第一行爲'/' 替換成'#')
加修飾符
g: 全局替換
i: 忽略字符大小寫
s///: s###, s@@@
   或 sed 's@/@#@g'  /fstab2   
\(\), \1, \2

l..e: like-->liker
 love-->lover
 >:sed 's#1..e#&r#g' sed.txt 或 sed 's#\(1..e\)#\1r#g' sed.txt 
 like-->Like
 love-->Love
    >:sed 's#l\(..e\)#L#g' sed.txt 
&: 引用模式匹配整個串

       

3.sed練習:

1、刪除/etc/grub.conf文件中行首的空白符;

sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf

2、替換/etc/inittab文件中"id:3:initdefault:"一行中的數字爲5;

sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab

3、刪除/etc/inittab文件中的空白行;

sed '/^$/d' /etc/inittab

4、刪除/etc/inittab文件中開頭的#號; 

sed 's@^#@@g' /etc/inittab

5、刪除某文件中開頭的#號及後面的空白字符,但要求#號後面必須有空白字符;

sed -r 's@^#[[:space:]]+@@g' /etc/inittab

6、刪除某文件中以空白字符後面跟#類的行中的開頭的空白字符及#

sed -r 's@^[[:space:]]+#@@g' /etc/inittab

7、取出一個文件路徑的目錄名稱;

echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'

基名:

echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'


      


發佈了21 篇原創文章 · 獲贊 17 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章