sed

Sed是一個行編輯器,通常一次只處理一行數據,默認不編輯原文件,而是把原來的數據複製一份到內存中執行編輯操作,可以對行進行刪除,增加,替換,選取等特性功能。

 

工具原理:

Sed讀取文件的內容放到內存中,我們通常稱作爲模式空間,sed會通過正則表達式匹配模式空間中符合條件的行,匹配到的行會進行編輯操作,有可能會輸出到頻幕上,這得看你的編輯操作了,原本讀取到的行默認會輸出到頻幕上,你可以不讓它輸出,sed會一直從第一行讀取到最後一行。

Sed還有段空間,被稱爲保持空間,當你讀取行文件到模式空間,模式空間會把讀取到的行文件保存到保持空間,我們還可以實現模式空間和保持空間的對換編輯。

 

Sed指令:

 

 

Sed正則表達式元字符

元字符

功能

示例

示例的匹配對象

^

行首定位

/^love/

匹配所有以love開頭的行

$

行尾定位符

/love$/

匹配所有以love結尾的行

.

匹配除換行符外的單個字符

/l..e/

匹配包含字母l後跟兩個任意字符跟字母e的行

*

匹配零個或多個前導字符

/*love/

匹配在零個或多個空格緊跟着模式love的行

[]

匹配指定字符組內的任字符

/[Ll]ove/

匹配包含loveLove的行

[^]

匹配不在指定字符組內的任字符

/[^A-KM-Z]ove/

匹配包含ove,但ove之前的那個字符不在AKMZ之間的行

\(..\)

保存已匹配的字符

s/\(love\)able/\1er/

標記元字符之間的模式,並將其保存爲標籤1之後可以用好\1引用它。最多定義9個標籤,從左邊開始編號,最左邊的是第一個。在loe被保存在寄存器1,之後被替換串引用,結果loveable替換爲lover

&

保存查找串以便在替換串中引用

s/love/**&**/

符號&代表查找。字符串love將替換前後各加了兩個星號的引用love變成**love**

\<

首定位符

/\<love/

匹配包含以love開頭的單詞的行

\>

詞尾定位符

/love/>/

匹配包含以love結尾的單詞的行

x\{m\}

連續mx

/o\{5\}/

分別匹配出現連續5字母o、至少5連續的o、或5-10連續的o的行

x\{m,\}

至少mx

/o\{5,\}/

X\{m,n\}

至少m個但不超過nx

/o\{5,10\}/

 

常用選項:

-n:不輸出模式空間中的內容至屏幕;

wKioL1Z6xa3A5zpLAAArnyyYf14943.png

-e :多點編輯;

wKioL1Z6xcHC9gMZAAAfjvu5-yQ285.png

-f  /PATH/TO/SED_SCRIPT_FILE:指定sed腳本

注意:sed腳本後邊不能有空格

wKiom1Z6xb-DzNjtAAAcPB_LTis116.png

-r, --regexp-extended:支持使用擴展正則表達式;

wKioL1Z6xdzyuHyBAAA09trIZrs709.png

-i[SUFFIX], --in-place[=SUFFIX]:編輯的結果保存到原文件中 

wKiom1Z6xdOy9nT9AAAb6TgqnwM097.png

 

地址定界:

(1) 空地址:默認是對全文進行處理;

(2) 單地址:

#:指定行;

/pattern/:被此模式所匹配到的每一行;

(3) 地址範圍

#,#:匹配兩者之間的內容帶其本身

#,+#:匹配從本行往後的#

#/pat1/:匹配本行到匹配到的字符的行

/pat1/,/pat2/:匹配兩字符串之間的內容,包括本身

wKioL1Z6xp7hJWctAAAYpP05Mo4417.png

$:最後一行;

(4) 步進:~

1~2:所有奇數行

wKioL1Z6xsqzt5UjAAAVTcS9l-Q168.png

2~2:所有偶數行


 wKioL1Z6xtrR8ZKWAAARheGlcuM165.png

  編輯命令:

d:刪除;

wKioL1Z6xurCJd3OAAAVyffLuoA036.png

上面刪除第一行

p:顯示模式空間中的內容;

wKioL1Z6xwPg16p8AAARf4mL8fY272.png

顯示第一行

a  \text:在行後面追加文本“text”,支持使用\n實現多行追加; 

wKiom1Z6xvzzn9CZAAAZSI1ACac407.png

i  \text:在行前面插入文本“text”,支持使用\n實現多行插入; 

wKiom1Z6xwewG85AAAAZ0OFkoUM472.png

c  \text:把匹配到的行替換爲此處指定的文本“text”;

wKioL1Z6xyvgjGU5AAAX2_VdkZo909.png

w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;

wKiom1Z6xyvTwzHbAAAQArn_5OA571.png

r  /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行後面;文件合併;

wKiom1Z6x0OzkplSAAAYFPf7FCU765.png

=:爲模式匹配到的行打印行號;

wKioL1Z6x2vREnwpAAAXLOCnMBM224.png

!:條件取反;

地址定界!編輯命令;

wKioL1Z6x3jRHKIBAAAQyECYbA8071.png


s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;

wKiom1Z6x3ej1UUOAAAXHTw9A3w895.png

替換標記:

g:全局替換;

wKioL1Z6x6mQ3X3zAAAdxxXapjw890.png

w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;

wKioL1Z6x72DLc7kAAAiam5saQA623.png

p:顯示替換成功的行;

wKiom1Z6x8CAFXX6AAAeU6678Iw617.png


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