shell sed語法
sed 是一種在線的、非交互式的編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨 時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成 后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操 作;編寫轉換程序等。
sed 命令格式
sed [options] edit_commands [file] # [ ] 中的內容為可選可不選
注意:sed 和 grep 不一樣,不管是否找到指定的模式,它的退出狀態都是0,只有當命令存在語法錯誤 時,sed的退出狀態才是非0
sed 支持正則表達式
sed 在文件中查找模式時也可以使用正則表達式(RE)和各種元字符。
正則表達式是括在斜杠間的模式, 用于查找和替換,以下是sed支持的元字符。


sed 常用選項

sed 常用命令選項

sed 高級命令選項

sed 替換標志

sed 命令使用實例
sed 命令進行文本替換
sed 使用 s 命令來進行文本替換操作
sed 's/srcStr/dstStr/' file
其中,srcStr 為想要替換的文本,dstStr 為將要替換成的文本。使用 s 命令時,sed 編輯器會在一 行一行地讀取文件 file,并在每行查找文本 srcStr,如果找到了,則將該處的 srcStr 替換為 dstStr
/ 字符為界定符,用于分隔字符串(sed 編輯器允許使用其他字符作為替換命令中的字符串分隔 符):
sed 's!/bin/bash!/BIN/BASH!' /etc/passwd # 使用 ! 作為字符串分隔符
sed 's#3#88#g' datafile
默認情況下,替換命令只會替換掉目標文本在每行中第一次出現的地方。若想要替換掉每行中所有 匹配的地方,可以使用替換標記 g。替換標記放在編輯命令的末尾。除了 g 外,還有幾種替換標 記:
數字指明替換掉第幾次匹配到的文本
沒有設置這個標記時,默認是替換第一次匹配的文本
sed 's/root/ROOT/2' /etc/passwd
這行命令將 /etc/passwd 文件中每行的第 2 個 root 替換為 ROOT
g 替換所有匹配到的文本
sed 's/root/ROOT/g' /etc/passwd
這行命令將 /etc/passwd 文件中的 root,全部替換為 ROOT;
p 打印與替換命令中指定模式(srcStr)相匹配的行
sed 's/root/ROOT/p' /etc/passwd
執行這命令,會在 STDOUT 上看到包含有 root 的行被輸出了兩次,一次是 sed 編輯器自動輸出 的;另一次則是 p 標記打印出來的匹配行 單獨地使用 p 標記沒什么用處,通常將 p 標記和 -n 選項結合起來使用,這樣就可以只輸出被匹配 替換過的行了
sed -n 's/root/ROOT/gp' /etc/passwd # 將 /etc/passwd 中 所有的 root 都替換成 ROOT,并輸出被修改的行
注:可以使用 " = " 命令來打印行號,用法與 p 一樣。
w file :將替換的結果寫到文件中
只保存被修改的行,與 -n + p 的功能類似
sed -n 's/root/ROOT/g w change.txt' /etc/passwd # 將 /etc/passwd 中所有的 root 都替換成 ROOT,并將被修改的行保存到文change.txt 中去

浙公網安備 33010602011771號