Linux下常用命令之sed學習總結

來源:互聯網
上載者:User

標籤:linux   sed   sed命令   Regex   sed總結   

  • Sed功能說明:

Sed是linux下一個強大的文字檔處理工具,通過對檔案增加、刪除、尋找、查詢操作,配合Regex以實現工作中的各種需求。同時也是一名營運人員必須掌握的核心技能。

------------------------------------------------------------------------------------------------------

  • sedRegex:

^           匹配行開始

$           匹配行結束

.           匹配一個非分行符號的任一字元

*           匹配0個或多個字元

[]          匹配一個指定範圍內的字元

[^]         匹配一個不在指定範圍內的字元

\(..\)      匹配子串,儲存匹配的字元,給替換命令s的\N引用

&           儲存搜尋字元用來替換其他字元,給替換命令s的&引用

x\{m\}      重複字元x,m次

x\{m,\}     重複字元x,至少m次

x\{m,n\}    重複字元x,至少m次,不多於n次

------------------------------------------------------------------------------------------------------

  • Sed命令格式:

sed [選項] ‘範圍/命令‘ 檔案

------------------------------------------------------------------------------------------------------

常用選項:

-n  只顯示匹配到的內容,通常和p參數配置使用。

-e  同時執行多個命令,另一種實現方式:‘命令1;命令2‘

-i  執行命令並實際修改檔案,如果不使用此選項,sed所有的操作都只是修改記憶體中的值而已。

------------------------------------------------------------------------------------------------------

  • 常用範圍:

1           :匹配第1行

1,5         :匹配第1行到第5行

2,$         :匹配第2行到最後1行

1~2         :匹配基數行,2表示步進值

2~2         :匹配偶數行,2表示步進值

/string/    :匹配包含字串的行

/[a-z]/     :匹配包含某個範圍的行

/^string/   :匹配包含元字元集的行

/正則/      :匹配Regex內容的行

------------------------------------------------------------------------------------------------------

  • 常用命令:

s  替換指定內容                   格式:‘/範圍/s/替換內容/新內容/替換範圍‘

a\ 在行下面插入文本               格式:‘範圍a\內容‘

i\ 在行上面插入文本               格式:‘範圍i\內容‘

c\ 把選定的行改為新的文本         格式:‘範圍c\內容‘

d  刪除選擇的行                   格式:‘範圍d‘

h  拷貝內容到緩衝區               格式:‘範圍h‘

G  獲得緩衝區內容並追加           格式:‘範圍G‘

p  列印檔案內容                   格式:‘範圍/命令/p‘

r  讀取file內容顯示在範圍後       格式:‘範圍/r file‘

w  提取範圍裡的內容到file裡       格式:‘範圍/w file‘

!  匹配與範圍相反的內容           格式:‘範圍!‘

------------------------------------------------------------------------------------------------------

  • 替換命令s常用參數:

/  定界符                         格式:‘/‘                          如果舊值包含‘/‘,可以修改/為@或者#或者|等

g  替換範圍,N表示第幾次匹配       格式:‘範圍/s/舊值/新值/Ng‘        沒有N表示全部替換

\N 引用子串,N表示第幾個子串       格式:‘範圍/s/*子串*/\N/g‘         *表示其它內容

&  引用‘#‘的內容                  格式:‘範圍/s/#/*&*/g‘             #表示匹配內容


------------------------------------------------------------------------------------------------------

Regex樣本:

/^#/               匹配所有以#開頭的行

/sh$/              匹配所有以sh結尾的行

/s.d/              匹配s後接一個任一字元接d

/s*ed/             匹配0個或多個s接ed的行

/[0-9]/            匹配包含數位行

/[a-z]/!           匹配不包含字母的行

/[^a-z]/           匹配不包含全字母的行

/\(sh\)ell/#\1#/   匹配shell替換為#sh#

/shell/*&*/        匹配shell替換為*shell*

/s\{5\}/           匹配包含5個s的行

/s\{5,\}/          匹配至少有5個s的行

/s\{5,10\}/        匹配5~10個s的行

------------------------------------------------------------------------------------------------------

常用選項樣本:

僅顯示匹配到的第1行內容 :sed -n ‘1p‘ /etc/passwd

同時執行多個命令        :sed -n -e ‘1p‘ -e ‘/mysql/p‘ /etc/passwd 或者 sed -n ‘1p;/mysql/p‘ /etc/passwd

執行命令並修改原檔案    : sed -i ‘2d‘ /etc/rc.local

------------------------------------------------------------------------------------------------------

常用範圍樣本:

匹配第1行           :sed -n ‘1p‘ /etc/passwd

匹配第1到5行        :sed -n ‘1,5p‘ /etc/passwd

匹配第2行到最後1行  :sed -n ‘2,$p‘ /etc/passwd

匹配奇數行          :sed -n ‘1~2p‘ /etc/passwd

匹配偶數行          : sed -n ‘2~2p‘ /etc/passwd

匹配包含mysql的行   :sed -n ‘/mysql/p‘ /etc/passwd

匹配以a/b/c開頭的行 :sed -n ‘/^[a-c]/p‘ /etc/passwd

匹配以root開頭的行  :sed -n ‘/^root/p‘ /etc/passwd

匹配5加至少2個0的行 :sed -n ‘/50\{2,\}/p‘ /etc/passwd

------------------------------------------------------------------------------------------------------

常用命令樣本:

匹配包含mysql開頭的行替換登入許可權 :sed -n ‘/^mysql/[email protected]/bin/[email protected]/sbin/[email protected]‘ /etc/passwd

匹配檔案第1行並在行前插入######   :sed ‘1i\######‘ /etc/passwd

匹配檔案第1行並在行後插入######   :sed ‘1a\######‘ /etc/passwd

匹配檔案第2行並修改為######       :sed ‘2c\######‘ /etc/rc.local

匹配檔案第2行並刪除內容           :sed ‘2d‘ /etc/rc.local

拷貝檔案第2行並追加到最後1行      :sed ‘2h;$G‘ /etc/rc.local

讀取resolv內容追加到local最後1行  :sed ‘$r /etc/resolv.conf‘ /etc/rc.local

讀取local第3到5行內容寫到newfile  : sed -n ‘3,5w newfile‘ /etc/rc.local

匹配檔案不包含空行的內容          :sed -n ‘/^$/!p‘ /etc/rc.local

------------------------------------------------------------------------------------------------------

替換命令s常用參數樣本:

根據實際情況修改定界符     :sed ‘[email protected]#!/bin/[email protected]#!/bin/[email protected]‘ /etc/rc.local

從第2次匹配後開始替換      :echo shellshellshell |sed ‘s/shell/SHELL/2g‘

提取子串並反向引用後替換   :echo test is ABc or 111 |sed ‘s/\([a-Z]\{3\}\) or \([0-9]*\)/*\2* or #\1#/‘

保留搜尋到的內容並引用     :echo this is test file |sed ‘s/test/##&##/‘

------------------------------------------------------------------------------------------------------

注意:

當sed在指令碼中處理替換操作時,如果新內容是引用變數,則需要把單引號修改為雙引號

樣本:

name=123456

echo "####6543210####"|sed -n "s/[0-9]\+/$name/p"

------------------------------------------------------------------------------------------------------


本文出自 “該死的溫柔” 部落格,請務必保留此出處http://lsong.blog.51cto.com/2432419/1922121

Linux下常用命令之sed學習總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.