學(xué)習(xí)的內(nèi)容來自于Linux Shell腳本攻略(2)
內(nèi)容只做了簡單的記錄岳掐,方便自己學(xué)習(xí)
shell 命令查詢地址:http://man.linuxde.net/
Sed
Sed原名為stream editor 流式文本編輯器
那么什么是流式文本編輯器呢锥涕,就是他在運行的時候职烧,每次只處理數(shù)據(jù)中的一行集嵌。
Sed一共具有兩種緩存區(qū)少欺,一直叫做臨時緩存區(qū)正压,也就是工作區(qū)瓷式,稱為模式空間替饿。而另一種就是持久緩存區(qū),也就是存儲區(qū)贸典,稱為保存空間视卢。
首先Sed會接受一串需要處理的文本數(shù)據(jù),緊接著Sed會使用他的特性流式編輯來對文本驚醒處理瓤漏。模式空間時一塊活躍的緩存區(qū)腾夯,在這里Sed可以執(zhí)行他的命令。Sed會從數(shù)據(jù)中一行一行的取下數(shù)據(jù)放到模式空間中蔬充。而當(dāng)Sed在模式空間中處理數(shù)據(jù)的時候蝶俱,保持空間可以臨時保存一些數(shù)據(jù)行。但是在保存空間中饥漫,Sed無法執(zhí)行命令榨呆。
一開始 保存空間和模式空間內(nèi)的數(shù)據(jù)均為空
命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
-e<script>或--expression=<script>:以選項中的指定的script來處理輸入的文本文件;
-f<script文件>或--file=<script文件>:以選項中指定的script文件來處理輸入的文本文件庸队;
-h或--help:顯示幫助积蜻;
-n或--quiet或——silent:默認(rèn)情況下,模式空間中的內(nèi)容在處理完成后將會打印到標(biāo)準(zhǔn)輸出彻消,該選項用于阻止該行為竿拆;
-V或--version:顯示版本信息
a\ 在當(dāng)前行下面插入文本。
i\ 在當(dāng)前行上面插入文本宾尚。
c\ 把選定的行改為新的文本丙笋。
d 刪除,刪除選擇的行煌贴。
D 刪除模板塊的第一行御板。
s 替換指定字符
h 拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。
H 追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)牛郑。
g 獲得內(nèi)存緩沖區(qū)的內(nèi)容怠肋,并替代當(dāng)前模板塊中的文本。
G 獲得內(nèi)存緩沖區(qū)的內(nèi)容淹朋,并追加到當(dāng)前模板塊文本的后面笙各。
l 列表不能打印字符的清單钉答。
n 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令酪惭。
N 追加下一個輸入行到模板塊后面并在二者間嵌入一個新行希痴,改變當(dāng)前行號碼。
p 打印模板塊的行春感。
P(大寫) 打印模板塊的第一行砌创。
q 退出Sed。
b lable 分支到腳本中帶有標(biāo)記的地方,如果分支不存在則分支到腳本的末尾。
r file 從file中讀行啼器。
t label if分支,從最后一行開始甲献,條件一旦滿足或者T,t命令颂翼,將導(dǎo)致分支到帶有標(biāo)號的命令處晃洒,或者到腳本的末尾。
T label 錯誤分支朦乏,從最后一行開始球及,一旦發(fā)生錯誤或者T,t命令呻疹,將導(dǎo)致分支到帶有標(biāo)號的命令處吃引,或者到腳本的末尾。
w file 寫并追加模板塊到file末尾刽锤。
W file 寫并追加模板塊的第一行到file末尾镊尺。
! 表示后面的命令對所有沒有被選定的行發(fā)生作用。
= 打印當(dāng)前行號碼并思。
# 把注釋擴(kuò)展到下一個換行符以前庐氮。
1)比如我們使用其中d ,d表示delete刪除的意思 , -e 則表示接下來的會使用選項中指定的script來處理宋彼。
首先假設(shè)我們有這么一個文件
或者說我們可以用-f的方法來完成
/pattern/d 會刪除匹配樣式的行
Nd會刪除第n行
2)-p
3)-s
sed 's/patterns/replace_patterns' filename
sed -i 's/patterns/replace_patterns' filename 匹配的同時保存更改
sed 's/patterns/replace_patterns/g' filename /g表示替換所有匹配的項目
sed 's/patterns/replace_patterns'/Ng filename 從第n處匹配開始替換
字符/作為sed 's' 中的一種定界符旭愧,但是我們可以任意使用不同的定界符| . , 如果匹配的內(nèi)容中出現(xiàn)定界符了,那我需要用\|來轉(zhuǎn)換
g 表示行內(nèi)全面替換宙暇。
p 表示打印行。
w 表示把行寫入一個文件议泵。
x 表示互換模板塊中的文本和緩沖區(qū)中的文本占贫。
y 表示把一個字符翻譯為另外的字符(但是不用于正則表達(dá)式)
\1 子串匹配標(biāo)記
& 已匹配字符串標(biāo)記
^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行先口。
$ 匹配行結(jié)束型奥,如:/sed$/匹配所有以sed結(jié)尾的行瞳收。
. 匹配一個非換行符的任意字符,如:/s.d/匹配s后接一個任意字符厢汹,最后是d螟深。
* 匹配0個或多個字符,如:/*sed/匹配所有模板是一個或多個空格后緊跟sed的行烫葬。
[] 匹配一個指定范圍內(nèi)的字符界弧,如/[ss]ed/匹配sed和Sed。
[^] 匹配一個不在指定范圍內(nèi)的字符搭综,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭垢箕,緊跟ed的行。
\(..\) 匹配子串兑巾,保存匹配的字符条获,如s/\(love\)able/\1rs,loveable被替換成lovers蒋歌。
& 保存搜索字符用來替換其他字符帅掘,如s/love/**&**/,love這成**love**堂油。
\< 匹配單詞的開始修档,如:/\<love/匹配包含以love開頭的單詞的行。
\> 匹配單詞的結(jié)束称诗,如/love\>/匹配包含以love結(jié)尾的單詞的行萍悴。
x\{m\} 重復(fù)字符x,m次寓免,如:/0\{5\}/匹配包含5個0的行癣诱。
x\{m,\} 重復(fù)字符x,至少m次袜香,如:/0\{5,\}/匹配至少有5個0的行撕予。
x\{m,n\} 重復(fù)字符x,至少m次蜈首,不多于n次实抡,如:/0\{5,10\}/匹配5~10個0的行。
【&】 已經(jīng)匹配的樣式
【\1】字串匹配標(biāo)記
這里匹配到的內(nèi)容是digit 7 欢策,這里/1所標(biāo)記的內(nèi)容是[0-9]所標(biāo)記的
因此這里可以理解成為7替換了digit 7