sed初學者實用說明_linux shell

來源:互聯網
上載者:User

例如,在多個系統、應用程式安裝之後,我們往往需要對很多設定檔進行修改,用vi編輯器意味著耗費時間、重複勞動,而sed就可將我們從繁重的重複勞動中解放出來。

sed的調用方式:

1、sed [sed選項] 'sed命令' 要修改的檔案
2、sed [sed選項] -f sed指令碼 要修改的檔案
3、sed指令碼 [sed選項] 要修改的檔案

這裡僅介紹最常用的第一種方式

sed選項:僅列常用的

-i:直接修改源檔案(不用這個選項的話無法直接修改,必須重新導向到新檔案,如果僅作為輸出測試則不需此選項),還可將源檔案修改前備份
sed -i.bak 's/123/234/' test.txt 將test.txt備份為test.txt.bak,然後將檔案內行第一個出現的“123”替換為“234”
-e:多次編輯,例如先將所有的123替換為234,再將第7行前加#號注釋
sed -i -e 's/123/234/g' -i -e '7 s/^/#/' test.txt
-f:指定sed指令檔名
-n:取消預設的輸出(不列印),用sed不加任何選項的話你會看到所有內容輸出,並不是按照sed命令所限制的條件輸出,那麼配合“p”命令經可以過濾掉不合格行,並顯示出合格行,例如
sed -n '尋找所有包含字元123的行'p test.txt 或 sed -n '尋找所有包含字元123的行p' test.txt

sed命令:這裡可以使用Regex,如遇特殊字元,需用“\”來屏蔽其特殊含義,例如“\$”表示普通的字元$

x x為某行行號
x,y 例如2,5,從第2行到第5行
/val/ 查詢包含“val”字元的行
/val1/val2/ 查詢包含兩個模式的行
val/,x 在給定行號的行上查詢包含“val”的行
x,/val/ 通過行號和模式查詢匹配的行
x,y! 不包含指定行號x,y的行

p 列印匹配的行
= 顯示行號
a\ 在定位了的行之後附加內容
i\ 在定位了的行之後插入內容
d 刪除定位的行,例如:2d 代表刪除第2行
c\ 用新文本替換定位行的文本
s 替換,形式為:'s/尋找的內容/替換的內容/'
g 進行全域替換,如不使用此選項將只對該行匹配到的第一個結果進行替換,該行下一個匹配的就不處理了。
...其他就不介紹了,百度搜下吧

執行個體學習:
test.txt檔案內容為
The honeysuckle band played all night long for only $90
It was an evening of splendid music and company
Too bad the disco floor fell through at 23:10
The local nurse Miss P.Neave was in attendance

1、顯示第2行的內容
sed -n '2p' test.txt

2、顯示第1到3行的內容
sed -n '1,3'p test.txt

3、僅顯示包含“disco”的行
sed -n '/disco/'p test.txt

4、顯示包含“$”字元的行
sed -n '/\$/'p test.txt

5、顯示以數字結尾的行,[0-9]是Regex 代表數字0到9;“$”表示行尾(“^”表示行首)
sed -n '/[0-9]$/'p test.txt
顯示結果為:
The honeysuckle band played all night long for only $90
Too bad the disco floor fell through at 23:10

6、顯示以數字結尾的行並顯示以大寫T為開頭的行
sed -n -e '/^T/'p -e '/[0-9]$/'p test.txt

7、匹配任意字母、後跟任意字母的多次重複,並以“ing”結尾的行
sed -n '/.*ing/'p test.txt

8、第一行與最後一行
sed -n '1p' test.txt
sed -n '$p' test.txt

9、將“nurse”改為“little nurse”,“&”命令用來重新調用被替換的內容
sed -n 's/nurse/little &/p' test.txt

10、先將所有的123替換為234,再將第7行前加#號注釋
sed -i -e 's/123/234/g' -i -e '7 s/^/#/' test.txt

11、將“--------”刪除,將空行刪除,將第一行和最後一行刪除,並列印第一列
檔案內容:
Database Size(MB) Date Created
------------------------------------------
mysql 2244 12/11/08
test 5632 12/11/08

(2 rows affected)
命令:
cat test.txt | sed 's/--*//g' | sed '/^$/d' | sed '$d' | sed '1d' | awk '{print $1}'
顯示結果:
mysql
test
說明:
使用s/--*//g刪除橫線-------
使用/^$/d刪除空行
使用$d刪除最後一行
使用1d刪除第一行
awk {print $1}列印第一列

12、一些雜項例子
^[0-9]表示行第一個字元為任一數字,例如“1asdf”;
^[0-9]*表示行首包含任意個數的數字,例如“1818asdf”
[0-9][0-9]*$表示行尾包含至少2個數字,例如“asdfasdf18”“asdf1818”
sed -i 's/^[0-9]*//g' test.txt 刪除行首的任一數字
sed -i -e 's/^[0-9]*//g' -i -e 's/$/& passed/' test.txt 刪除行首任一數字,並在每行結尾加上“ passed”
sed -i -e 's/^/#&' test.txt 給每行行首加上“#”注釋
s/\.$//g 刪除以句點結尾的行的句點
s/^[ ][ ]*// 刪除行首的任意個空格
s/^.// 刪除行首的第一個字元
s/^\/// 刪除行首的“/”字元
s/SP\(..\)//g 刪除字元“SP”以及緊跟其後的兩個任一字元,“SPLLY”-->“Y”

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.