標籤:text 沒有 影響 ops 功能 tor 工作 使用 script
sed:stream editor,Linux的一款流編輯器,主要對常值內容進行過濾與替換。使用命令man sed,可以看到對sed命令的介紹
下文總體指導思想:
對於sed的工作過程,個人認為如果不是非要把sed的所有功能都學會,是不需要把工作過程搞懂的。絕大部分人,特別針對於想要先儘快上手的人,掌握如何使用基本的sed功能應該比較重要的!
學習sed命令的使用,主要還是結合man sed中的提示來學習:
sed synopsis(大綱):命令的格式
- sed 【option】【script】【input_file】
sed使用的學問就是在上面三個標記顏色的地區,下面簡述這三個地區:
【option】域:作用主要是指定sed處理完資料後應該怎麼呈現結果(可能描述不是很恰當),比如結果怎麼顯示,要不要對文本本身修改等。
空:當不指定參數時,sed為將處理的常值內容原樣輸出,即不過做什麼操作,檔案的常值內容都先顯示
-n: (silent,也稱為靜默模式)取消預設輸出,即與上面相反。只將進行過相應處理的行列印輸出,沒有匹配到的行不原樣輸出。
-i:sed直接操作常值內容,對其的任何內容修改都會變更檔。(sed預設不是對檔案的常值內容進行操作,而是拷貝其內容到自己的工作空間中在進行操作 )
【script】域:該域的作用是指定對某哪些行做某哪些操作!
該域其實是分為兩個部分:指定行+操作(address+command),前者可以少但後者不能少!
- 怎麼表現要處理的行:address
- 要進行哪些操作:command
如何表示行呢?有以下選項:(90%的主要寫法,個別較少使用不適合入門理解未寫上)
- number:直接指定一個數字,如5,即操作的行對象是第5行
- first~step:直接上例子(3~4),指的是從第三行開始匹配,之後每隔4行就被匹配到。因此,第3,7,11,...行將是被操作的行。first指要匹配的第一行,step指從第first行之後,每隔step行的行就被匹配到,linux man手冊的例子是(1~2),匹配的是所有奇數行,作為加深印象的例子
- $:直接一個$,匹配文本的最後一行
- /regexp/或\cregexpc :匹配符合Regex的行,注意:c可以是任一字元只需保證首尾一致!(這裡著重不是講Regex,不熟悉的要參見其他筆記)
- addr1,addr2:如(1,5)匹配1到5行,第1行和第5行都將會被匹配到
- addr1,+N:如(1,+5)匹配第1行之後,在往後匹配5行,也就是一共匹配6行。即將匹配第addr1行以及接下來N行
- addr1,~N:如(10,~8)匹配第10行到第16行(最近一個是8的倍數那一行)。即將匹配第addr1行以及後面最近一個行號是N的倍數的行
如何表示操作呢?有以下選項:(60%主要寫法,涉及保持空間的參數未列入)
允許沒有地址或只有1個地址的參數:
- =:列印正在操作的行,即當前行
- a \text:以另起新行的形式,追加text內容在指定的行後面,支援使用\n實現多行插入
- i \text:以另起新行的形式,追加text內容在指定的行前面,支援使用\n實現多行插入
- r filename:從指定檔案中讀取內容追加到當前行合并
允許匹配一個位址範圍的參數:
- d:刪除當前行(刪除模式空間中的內容)
- c \text:以text內容替換指定的行,支援使用\n實現多行插入
- p:列印當前行(即列印當前模式空間)
- s/regexp/replacement/:對操作行使用Regex匹配指定內容,用replacement替換
- {;}:若一次不止進行一個操作,可以將多個巨集指令引數用{}包括進來,參數之間可以用;隔開,如{a \text;p}
【input_file】域:指定要處理的檔案
舉2個栗子:
test檔案內容如下:
1、sed -n ‘4,7p‘ test01
-n:對應option域;
‘4,7p‘:對應script域,其中
4,7對於address部分,
p匹配巨集指令引數部分;
test01:對應input-file域
含義:對第4到7行進行列印輸出(p參數),-n選項表示靜默輸出,此時不輸出原文本;不加-n參數時如下:
2、sed -i ‘4,+2s/[0-9]/12345/‘ test
當不加-i參數時,修改不影響原常值內容
加-i參數後,修改會被寫入原常值內容
含義:對test檔案的第4行開始,往後2行(即4,5,6三行)所匹配到的內容進行替換,[0-9]匹配一個數字,將該數字替換為12345,寫入原檔案中。
總結:個人認為sed的學習入門以此作為概覽是不錯的選擇,以上的解釋表述了如下問題:
1、sed命令的文法
2、sed命令各種部分的含義,以及分別有哪些簡單,易理解的選擇性參數
3、簡單的使用樣本
深入的教程本文沒有涉及,本文中有出錯不妥之處,請讀者提出指正~
Linux命令之sed使用入門概述