sed是什么
sed是linux文本處理工具三劍客(grep,sed,awk)之一,用來處理文本的流編輯工具。主要用來編輯一個或多個文件,簡化重復操作文件。
sed的工作原理和相關概念
sed是行處理的模式,針對文件內容從上往下一行一行地讀取。每行的操作步驟如下示意圖:
sed的語法格式
sed [OPTION]... 'script' [input-file] ...
options
-n 或者 –quiet 或者 –silent:僅顯示經過腳本處理(執行寫操作)的模式空間的內容
-e 或者 –expression:以選項中的指定的script來處理輸入的文本文件;
-f 或者 –file:以選項中指定的script文件來處理輸入的文本文件
-h 或者 –help:顯示幫助信息
-V 或者 –version:顯示版本信息
script
script中包含了兩部分,定界符和命令處理
-
定界符
1、空地址:表示在全文范圍 2、單地址: #:指定行; /pattern/:被此模式所匹配到的每一行; 3、地址范圍: #,#:從起始行到結束行 #,+#:從第起始行,向后數多少行 #,/par1/:從起始行到pat1第一次匹配到的行 /pat1/,/pat2/:從pat1第一次匹配到的行到pat2第一次匹配到的行 $:最后一行
-
處理命令
d:刪除當前模式空間中的內容 p:將當前模式空間中的內容送到標準輸出 a\text:在當前模式空間后面追加內容text,支持\n追加多行 i\text:在當前模式空間前面插入內容text,支持\n插入多行 c\text:把當前模式空間的內容替換為text,支持\n替換為多行 r /PATH/FROM/FILE:讀取指定文件的內容,追加到當前模式空間后面 =:在當前模式空間前面插入當前模式空間在源文件中的行號 !:命令前加!,給定界符取反,不在定界范圍內才執行命令 s/pat1/text/:查找替換,分隔符可自定義,如@@@,###等 修飾標記: g:全局替換,沒有此標記,只替換正則匹配到的第一項 w /PATH/TO/FILE:將替換后的內容保存一份至指定文件 p:將替換成功的內容送至標準輸出
sed每次執行時還擁有一個保持空間(hold space),用來臨時保存內容,開始時默認是一個空行。在模式空間和保存空間之間來回操作內容,可以實現一些很復雜的功能。下面是一些高級命令:
h:把當前模式空間中的內容覆蓋至保持空間中 H:把當前模式空間中的內容追加至保持空間中 g:把保持空間的內容覆蓋至當前模式空間中 G:把保持空間的內容追加至當前模式空間中 x:把當前模式空間和保持空間中的內容互換 n:我的理解是對模式空間的內容執行一次輸出測試,然后再覆蓋讀取文件下一行的內容到模式空間中 N:我的理解是對模式空間的內容執行一次標準輸出測試,然后再覆蓋讀取文件下一行的內容到模式空間中 標準輸出測試(我自創的概念,見上面工作原理圖):就是判斷是否用了-n選項,沒有則將模式空間的內容送至標準輸出,否則丟棄模式空間的內容 d:刪除模式空間中的行 D:刪除模式空間中的所有行
-
個人理解:每讀行的內容對應的模式空間的內容處理完畢時,都會進行一次輸出測試,而n和N命令在讀取下一行之前,當前行也被處理完畢,也會進行一次標準輸出測試。
原創文章,作者:小江,如若轉載,請注明出處:http://www.www58058.com/50086