sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作。
0x00 命令格式
sed [-nefri] 'command' context
選項
- -n 使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢幕上。但如果加上 -n 參數后,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。
- -e 直接在指令列模式上進行 sed 的動作編輯;
- -f 直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的sed 動作;
- -r sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
- -i 直接修改讀取的檔案內容,而不是由屏幕輸出。
命令
- a 新增 a的后面可以接字符串,而這些字串會在新的一行出現(目前的下一行)
- c 取代 c的后面可以接字符串,這些字串可以取代n1,n2之間的行
- d 刪除
- i 插入 i的后面可以接字符串,而這些字串會在新的一行出現(目前的上一行);
- p 打印 將某個選擇的數據打印。通常p會與參數
sed -n
一起使用 - s 取代 通常這個s的動作可以搭配正規表達式 格式
s/要替換的字符串/新的字符串/g
0x01 例子
假設存在一個文件haha為/etc/passwd
的副本。
刪除
刪除第一行
sed '1d' haha
刪除最后一行
sed '$d' haha
刪除一到三行
sed '1,3d' haha
刪除三到最后一行
sed '3,$d' haha
打印
打印第一行
sed -n '1p' haha
打印最后一行
sed -n '$p' haha
打印一到三行
sed -n '1,3p' haha
打印三到最后一行
sed -n '3,$p' haha
模式查詢
命令sed -n '/at/p' haha
打印haha文件包含at的行
命令sed -n '/\//p' haha
打印haha文件包含at的行
增加
命令sed '1,3a haha' haha
在文件haha的第一行第三行末尾換行加字符串haha
命令sed '1a haha\nhaha' haha
在文件haha的第一行末尾換行添加兩行haha
替代
命令sed '1c haha' haha
將文件的第一行替換為haha
命令sed '1,3c haha' haha
將文件的第一行到第三行替換為haha
替換一行中的某部分
格式:sed 's/要替換的字符串/新的字符串/g'
(要替換的字符串可以用正則表達式)
插入
命令sed -i '$a haha' haha
在文件的最后一行插入haha
匹配行操作
sed -i '/匹配字符串/d' haha
刪除匹配行
sed -i '/匹配字符串/s/替換源字符串/替換目標字符串/g' haha
替換匹配行中的某個字符串