心智圖資源庫 Sed命令速記
這是一篇關於Sed指令速記的心智圖,包含介紹與語法、選項、指令、元字元集等,希望對你有幫助!
編輯於2023-11-23 12:09:46Sed命令速記
介紹與文法
描述:流編輯器-Stream editor,進行文字過濾與格式化替換輸出; sed有兩個內建的儲存空間: 1).模式空間(pattern space)執行完指令後清空 2).保持空間(hold space) 預設不會被清空
指令格式:sed [options] -f scriptfile files #支援多文件 sed [選項] '[位址範圍|模式範圍] s#{被替換的字串}#{替換後的字串}#{替換標誌}' [輸入檔案]
多表達式:sed '表達式' | sed '表達式' #等價於下面這一sed語句 sed '表達式; 表達式'
選項[options]
-i :直接修改讀取資料的檔案的內容,而不由Screen(螢幕)輸出.(直接在來源檔案裡加入或備份)
-r :支援擴展表達式,sed裡面()就不需要使用\(),來進行轉義
-f <script檔案>或--file=<script檔案>:#以選項中指定的script檔案來處理輸入的文字檔案
-n或--quiet或--silent:#取消預設輸出,僅顯示script處理後的結果,並輸出到Screen(螢幕)中;
-e <script>或--expression=<script>:#以選項中的指定的script來處理編輯輸入的文字文件,可以執行多條sed指令
命令[command]
增操作
a 在目前行下一行追加插入文本 i 在目前行插入文字
刪除操作
d 刪除選擇的行 D 刪除模板區塊的第一行
改操作
s 替換指定字元 。通常搭配正規表示式使用,其分隔符號可以自訂 c 把選定的行改為新的文本
查操作
n 讀取下一個輸入行,用下一個指令處理新的行而不是用第一個指令 N 追加下一個輸入行到模板區塊後面並在二者間嵌入一個新行,改變當前行號碼
p 列印模板區塊的行
文件保存讀取
w file 寫並追加模板塊到file末尾 W file 寫並追加模板區塊的第一行到file末尾
r file 從file讀行
行號與反向取得
= 列印目前行號碼
! 表示後面的指令對所有沒有被選取的行發生作用
替換標誌
確定處理第幾個字元處開始處理,1-512 數字標誌
i 忽略大小寫替換/匹配/查找
g 表示行內全面替換
p 表示印行,常與-n連用
大小寫轉換:\l \L \u \U 即 lower / upper
y :將匹配到字串進行大寫小寫轉換,不管有木有加g
e 執行指令標誌,將模式空間的任何內容當作bash指令執行(需要注意空格)
正規比對使用:\1 子字串比對標記 & 已符合字串標記
w 表示把行寫入一個檔案。 x 表示互換模板區塊中的文字和緩衝區中的文字。
元字元集
注意:sed無\d \w 代表 數字與字母的元字符,只有下面這幾種元字符
^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行。 $ 匹配行結束,如:/sed$/匹配所有以sed結尾的行。 . 匹配一個非換行符的任意字符,如:/s.d/匹配s後接一個任意字符,最後是d。 * 匹配0個或多個字符,如:/*sed/匹配所有模板是一個或多個空格後緊接sed的行。 [] 符合一個指定範圍內的字符,如/[ss]ed/匹配sed和Sed。 [^] 匹配一個不在指定範圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。 \(..\) 符合子字串,儲存符合的字符,如s/\(love\)able/\1rs,loveable被替換成lovers。 & 儲存搜尋字符用來替換其他字符,如s/love/**&**/,love這成**love**。 \< 配對單字的開始,如:/\<love/符合包含以love開頭的單字的行。 \> 配對單字的結束,如/love\>/符合包含以love結尾的單字的行。 x\{m\} 重複字元x,m次,如:/0\{5\}/符合包含5個0的行。 x\{m,\} 重複字元x,至少m次,如:/0\{5,\}/符合至少有5個0的行。 x\{m,n\} 重複字元x,至少m次,不多於n次,如:/0\{5,10\}/符合5~10個0的行。
經典範例
刪除命令d
sed -ri '3d' file //刪除檔案file中的第三行
sed -ri '/root/d' file //刪除正規符合的包含root的行
sed -ri '/root/,5d' file //刪除從正規符合的包含root的行開始,到第5行的內容
sed -ri '/root/, 5d' file //刪除從正規符合的包含root的行開始,加上5行的內容
sed -ri '/root/,!d' file //刪除正規符合到的包含root的行以外的其他行
替換命令s
sed -ri 's/root/alice/' passwd //將passwd檔案中的第一個root替換為alice
sed -ri 's/root/alice/g' passwd //將passwd檔案中的所有root替換為alice
讀檔案指令r
sed -r '/root/r /etc/hosts' passwd //在符合到passwd檔案中的root字串之後,讀入/etc/hosts文件
寫檔案指令w
追加命令
在指定行的後面附加一行a
sed -r '2a i love you' passwd //在passwd檔案的第二行之後插入一行 i love you
在指定行的前面插入一行i
sed -r '2i i love you' passwd //在passwd檔案的第二行之前插入一行 i love you
修改命令c
sed -r '3c\I like this! ' passwd //將第三行替換成I like this!
sed -r '/daemon:/c\I like this! ' passwd //找到正規符合的行替換成I like this!
取得下一指令n
取反選項!
補充知識
l (小寫l)列印顯示特殊字元(行尾以及tab標誌)
特殊符號 {} 包含在{}中的命令按照順序執行,並且前面命令會影響後面的命令
sed 腳本編寫
每一行一條sed表達式