文本處理三劍客之sed流編輯器

流編輯器 sed

  模式空間,默認不編輯原文件,僅對模式空間中的數據做處理;處理結束後,將模式空間中數據打印至屏幕。sed是一個行編輯器。

sed [options] 'Address Command' file ...

  Option

-n: 靜默模式, 不再默認顯示模式空間中的內容
-i: 直接修改原文件
-e SCRIPT 可以同時執行多個腳本, 操作
-f /PATH/TO/SED_SCRIPT  如: sed -f /path/to/scripts file ( 指定 sed 的腳本文件)
-r: 表示使用擴展正則表達式

  Address 地址定界:

1、 StartLine,EndLine 比如 1,10 $:最後一行
2、 /RegExp/ /^root/, root 開頭的所有行,模式匹配
3、 /pattern1/,/pattern2/ 第一次被 pattern1 匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的所有行
4、 LineNumber指定的行
5、 StartLine, +N 從 startLine 開始,向後的N行。

  Command

1d: 刪除符合條件的行; 

2p: 顯示符合條件的行;

3a \”string”: 在指定的行後面追加新行, 內容爲 string; 

4\n: 可以用於換行

5i \”string”: 在指定的行前面添加新行, 內容爲 string
6
r FILE: 將指定的文件的內容添加至符合條件的行處
7w FILE: 將地址指定的範圍內的行另存至指定的文件中;
8
顯示符合條件行的行號
8s/pattern/string[&]/修飾符查找並替換, 默認只替換每行中第一次被模式匹配到的字符串。 &: 引用模式匹配整個串 修飾符 g: 全局替換 i: 忽略字符大小寫

sed練習


sed練習:

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

       sed s@^[[:space:]]*@@' /etc/grub.conf

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


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

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

       

  3. 刪除/etc/bashrc文件中的空白行;

       sed '/^$/d' /etc/bashrc


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

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


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

       sed -r 's@^#[[:space:]]+@@g' /1.txt  (將下面說明中的例子,創建成/目錄下名字爲1的txt文件)


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

       sed -r 's@^[[:space:]]+#@@g' /1.txt  (將下面說明中的例子,創建成/目錄下名字爲1的txt文件)


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

       echo "/home/zrs/" | sed -r 's@^(/.*/)[^/]+/?@\1@g' (以/home下的/zrs目錄爲例)


  8. 取出一個文件路徑的基名。

       echo "/home/zrs/" | sed -r 's@^/.*/([^/]+)/?@\1@g' (以/home下的/zrs目錄爲例)
























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章