sed(Stream Editor)是一個行編輯工具。下面我們介紹 sed 的實現原理和基本使用方法。
一、sed 的處理文本的流程
基本處理流程如下:
處理流程是:每次讀入文本文件的一行到內存中的模式空間中,在模式空間中處理後將處理的結果輸出,默認會打印到屏幕上。因此,默認情況下,不會改變原文件的內容。
二、sed 命令的使用
基本語法:sed [options]... '地址定位 編輯命令' FILE...
地址定位的方法:
1、行定位:
start_line[,end_line]
2、模式匹配
/pattern1/,/pattern2/ 第一次被pattern1匹配到的行開始,到第一次被pattern2匹配到的行結束之間的所有行
/pattern/ 被pattern匹配到的行
3、沒有地址定界,代表的是全文。
常用參數:
-n: 靜默模式,不顯示模式空間中的內容
-r: 支持使用擴展正則表達式
-i: 修改原文件;
-e: sed -e "" -e "" -e "", sed "{COM1;COM2;COM3}"
-f: -e的功能差不多,只是將多個COM寫到文件中區。
編輯命令:命令可在之前加!取反
p:打印
例如:打印 /etc/fstab 文件的 3 到 5 行
如果不加 -n 的話,會是什麼效果呢?
這就是 sed 處理流程所決定的,一般 p 命令與 -n 參數一起使用,才能達到想要的效果。
d: 刪除
i \text: 行上方,text即爲插入的內容
a \text: 行下方,text即爲插入的內容
r /path/from/some_file: 把符合條件的行讀到指定文件中
w /path/to/some_file: 把符合條件的行保存至指定的文件中
=: 顯示符合條件行的行號
s///: s@@@ 查找替換
g,i:g是全文替換,i忽略大小寫
1 2 | [root@server ~] # sed -e '/^#/d' -e 's/\(id:\)[0-9]\(:initdefault:\)/\13\2/' /etc/inittab id :3:initdefault: |
基本用法應經介紹完畢,最主要的的如何使用正則表達式來定位地址範圍