linux 中sed的用法詳解
阿新 • • 發佈:2018-12-18
sed 是操作,過濾和轉換文字內容的強大工具,sed可以從檔案和管道中讀取輸入。
sed 命令語法 sed [ option ] {sed -commands} {input -file} -e :執行多個sed命令 -n :只顯示操作行 -i :修改目標檔案內容 sed每次都從目標檔案讀取一行記錄,並在該記錄上執行sed -commands 命令 直到最後一行結束
p 列印命令
命令p 可以控制只輸出你指定的內容 通常使用p時,還需要使用-n選項來遮蔽sed 的預設輸出 ,否則當執行命令p時,每行記錄會輸出兩次。
地址範圍 可用~ 如 n~m 表示從第 n 行開始,每次 跳過 m 行: 1~2 匹配 1,3,5,7,…… 2~2 匹配 2,4,6,8,…… 1~3 匹配 1,4,7,10,…… 2~3 匹配 2,5,8,11,……
sed -n ‘p’ filename #列印所有行 sed -n ‘2p’ filename #列印第二行 sed -n ‘1,4p’ filename #列印1-4行 sed -n ‘2,$’ filename #列印 sed -n ‘2~3 p’ filename #列印2,5,8,11 等行 sed -n ‘/jam/p’ filename #列印匹配到jam的所有行 sed -n ‘/jam/,4 p’ filename #列印第一次匹配jam的行至第四行的內容 sed -n ‘/jam/,$ p’ filename #列印第一次匹配到jam的行到最後所有行 sed -n ‘/jam/,/wa/ p’ filename #列印匹配jam的行開始到jane的行之間的所有內容
**d 刪除 命令 ** 注意 :不加 i 引數 ,原始檔內容不變。
sed ‘2d’ filename #刪除第二行 sed ‘1,4d’ filename #刪除1到4行 sed ‘2,$d’ filename #刪除第二行到最後一行 sed ‘1~2 d’ filename #刪除奇數行 sed ‘/amn/d’ filename #刪除匹配amn 的行 sed ‘/amn/,4 d’ filen #刪除匹配jason的行至第四行 sed ‘/ar/,$ d’ filename #刪除第一次匹配到ar的行到最後一行 sed ‘/ar/,+2 d’ filename #刪除第一次匹配到ar的行和緊跟它後面的兩行 sed ‘/^$/d’ filename #刪除空行
w 寫入命令
命令w 可以把一個檔案內容儲存到另一個檔案當中
sed ‘w 1.txt’ 2.txt #把2.txt的內容儲存到1.txt 同時顯示在螢幕上若1.txt 檔案中有內容 ,則會覆蓋
sed -n ‘w 1.txt’ 2.txt #同上功能 只是不再螢幕上顯示
sed -n ‘2w 1.txt’ 2.txt #只儲存第二行
sed -n ‘1,4w 1.txt’ 2.txt #只儲存1到4行
sed -n ‘2,$w 1.txt’ 2.txt #儲存第二行至最後一行
sed -n ‘1~2 w 1.txt’ 2.txt #儲存奇數行
sed -n ‘/jame/w 1.txt’ 2.txt #儲存匹配到jame的行
sed -n ‘/jasm/,4 w 1.txt’ 2.txt #儲存第一次匹配jasm的行至第四行
sed -n ‘/sxd/,/ddd/ w 1.txt’ 2.txt #儲存匹配sxd至匹配ddd 的行
**S 替換命令 **
sed ‘s/ddd/sxd/’ filename #用sxd替換檔案中每行當中第一個ddd
sed ‘/ddd/s/sxd/vvv/’ filename #用vvv替換包含ddd中行中第一個sxd
**g 全域性標記 **
sed ‘s/ddd/sxd/g’ filename #用sxd替換含有ddd的所有行中所有的ddd
**1 2 3 數字標記 **
sed ‘s/ddd/sxd/2’ filename #替換第二個ddd
p 列印標記
sed -n ‘s/sxd/ddd/p’ filename #列印替換後的行
sed -n ‘s/sxd/ddd/2 p’ filename #把每行中第二次出現sxd替換為ddd打印出來
w 寫標記
sed -n 's/John/Johnny/w output.txt' employee.txt #將替換後的內容寫到 outout。txt 中
i 忽略大小寫
sed 's/john/Johnny/i' employee.txt #把 john 或 John 替換為 Johnny
&的作用
sed 's/^[0-9][0-9][0-9]/[&]/g' employee.txt #給僱員 ID(即第一列的 3 個數字)加上[ ],如 101 改成[101]
sed 's/^.*/<&>/' employee.txt #把每一行放進< >中
正則表示式
sed -n '/^103/ p' employee.tx #匹配103開頭的行並列印
sed -n '/r$/ p' employee.txt #匹配r結尾的行並列印
匹配0到任意多次(*)
sed -n '/log: *./p' log.txt #匹配包含log並且log後面有資訊的行
匹配1到多次 (\+)
sed -n '/log: \+/ p' log.txt #匹配log後面有一個或者多個空格的行
匹配0次或者1次 前面的字元
sed -n '/log: \?/ p' log.txt #匹配log後面沒有空格或者有一個空格的行
轉義字元 ( \ )
sed -n '/127\.0\.0\.1/ p' /etc/host #匹配含有127.0.0.1的行並列印
字符集 ( [0-9] )
sed -n ‘/[123]/ p' filename #匹配含有1或2或3的行 並列印
a 追加命令
sed '2 a 203 ' employee.txt #在第二行加入203
sed '$ a 203' employee.txt #在結尾加入203
sed ‘/sxd/ a 123’ filename #在匹配到sxd的行後加入123
i 插入命令
和追加命令a 用法一樣,只是在前一行插入
c 修改命令
sed '2 c 202' employee.txt #用202替代第二行