一、SED介紹(Stream EDitor)
SED是一項Linux指令,功能同awk類似,差別在於,sed簡單,對列處理的功能要簡單一些,awk的功能複雜,對列處理的功能比較強大。
Linux sed命令是利用script 來處理文本文件。
sed可依照script的指令,來處理、編輯文本文件。
sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;編寫轉換程序等。
二、語法
sed [-hnV][-e<script>][-f<script>][文本文件]
1、參數說明:
-e<script>或 --expression=<script> 以選項中指定的script來處理輸入的文本文件。
-f<script> 或 --file=<script文件> 以選項中指定的script來處理輸入的文本文件。
-h或--help 顯示幫助
-n或--quiet 或 --silent 僅顯示scirpt處理後的結果
-V 或 --version :顯示版本信息。
-r :表示使用擴展正則表達式。
2、動作說明:
a:新增,a的後面可以接字串,而這些字串會在新的一行出現(目前的下一行) a\string:在指定的行後面追加新行,內容爲string
c:取代,c的後面可以接字串,這些字串可以取代n1,n2之間的行。
d:刪除,因爲是刪除,所以d後面通常不接任何字串
i:插入,i的後面可以接字串,而這些字串會在新的一行出現(目前的上一行) i\string:在指定的行後面追加新行,內容爲string
p:打印,將某個選擇的數據打印。通常p會與參數sed -n 一起運行。
s:取代,可以直接進行取代的工作。通常s的動作可以搭配正則表達式。
加修飾符
q:全局替換
i:忽略字符大小寫
r FILE:將指定的文件的內容添加至符合條件的行處
w FILE :將指定範圍內的內容另存至指定的文件中。
sed 'AddressCommand' file ...
Address:
1、StartLine,EndLine
比如 1,100
$:表示最後一行
2、/RegExp/
/^root/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行開始,至第一次被pattern2 匹配到的行結束,這中間所有的行。
4、LineNumber
指定的行
5、StartLine,+N
從StartLine開始,向後的N行;
Command:
-d : 刪除某行
三、練習題
1、刪除/etc/grub.conf文件中行首的空白字符:
sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf
2、替換/etc/inittab文件中“id:3:initdefault:”一行中的數字爲5:
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3、刪除/etc/inittab文件中的空白行
sed '/^$/d' /etc/inittab
4、刪除/etc/inittab文件中開頭的#號:
sed 's@^#@@g' /etc/inittab
5、刪除某文件中開頭的#號及後面的空白字符,但要求#號後面必須有空白字符:
sed -r 's@^#[[:space:]] +@@g' /etc/inittab
6、刪除某文件中以空白字符後面跟#號的行中的開頭的空白字符及#
sed -r 's@^[[:space:]] +#@@g' /etc/inittab
7、取出一個文件路徑的目錄名稱:
echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
四、字符串測試
==:測試是否相等,相等爲真,不等爲假
!=:測試是否不等,不等爲真,相等爲假
> :測試是否大於,大於爲真,不大於爲假
<:測試是否小於,小於爲真,不小於爲假
-n string :測試指定字符串是否爲空,空則爲真,不空則爲假。
-s string:測試指定字符串是否不爲空,不空則爲真,空則爲假
1、練習題
傳遞一個用戶名參數給腳本,判斷此用戶的用戶名跟其基本組的組名是否一致,並將結果顯示出來。
2、寫一個腳本
傳遞一個參數(單個字符)給腳本,如果參數爲q,Q、quit或Quit,就退出腳本;否則,就顯示用戶的參數。
五、for循環
對於循環,需要進入條件,退出條件。
常見的循環方法:for 、 while 、 until
for 變量 in 列表 ;do
循環體
done
for i in 1 2 3 4 5 6 7 8 9 10 ;do
加法運算
done
遍歷完成之後,退出;
如何生成列表:
(1) {1..100}
(2) 'seq [起始數 步進長度 結束數'
算從1加到100的和
六、練習題