sed 用法
sed [option]... 'script' inputfile ...
常用選項
- -n 關閉自動打印
- -e 多點編輯
- -f /PATH/SCRIPT 從指定文件中讀取編輯腳本
- -r 支持使用擴展表達式
- -i.bak 備份文件並原處編輯
script
地址命令
地址定界
(1)不給地址:對全文進行處理
(2)單地址:
- #:指定的行,$: 最後一行
- /pattern/: 被此處模式所能夠匹配到的每一行
(3)地址範圍:
- #,# 第幾行到第幾行
- #,+# 第幾行到後面的幾行
- /pat1/, /pat2/ 正則表達式,可以搜索日誌中幾點幾分到幾點幾分的日誌內容
- 例如 sed -n '/^2020-02-29 03:23:34 /,/^2020-02-29 04:13:24/' xxx.log 舉例就不一而足了
- #,/pat1/
(4)~:步進
- 1~2 奇數行 步進2
- 2~2偶數行 步進2
想不起來這個命令的適用場景,後面再補充吧
編輯命令
- d 刪除模式空間匹配的行,並立即啓用下一輪循環
- p 打印當前模式空間內容,並追加到默認輸出之後
- a[\]text 在指定行後面追加文本,支持使用\n實現多行追加
- i[\]text 在行前面插入文本
- c[\]text 替換行爲單行或多行文本
- w /path/file 保存模式匹配的行至指定文件
- r /path/file 讀取指定文件的文本至模式空間中匹配到的行後
- = 爲模式空間中的行打印行號
- ! 模式空間中匹配行取反處理
- s/// 查找替換,支持使用其它分隔符,s@@@, s###替換標記
- ——替換標記
- g 行內全局替換
- p 顯示替換成功的行
- w /PATH/FILE
sed 示例 注意直接粘貼在shell窗口上會無法執行,是因爲空格字符的問題
- cp /etc/passed passwd
- sed '2p' passwd 打印第二行,並且全部打印
- sed -n '2p' passwd 只打印第二行
- sed -n '1,4p' passwd 打印1-4行
- sed -n '/root/p' passwd 打印包含root的行
- sed -n '2,/root/p' passwd 從第二行開始,打印包含root的行
- sed -n '/^$/=' passwd 顯示空行行號,ps (= 爲模式空間中的行打印行號)
- sed 'root/a\superman' passwd 行後
- sed 'root/i\superman' passwd 行前
- sed 'root/c\superman' passwd 代替行
- sed '/^$/d' file 刪除空格行
- sed '1,10d' file 刪除1-10行
- nl passwd|sed '2,5d' 刪除2-5行
- nl passwd|sed '2a tea' 在第二行新增一個tea(茶葉單詞)
- sed 's/test/mytest/g' file 全局替換 test -> mytest
- sed -e 's/test/mytest/' 's/dog/cat/ ' pets 多點編輯
- sed -i.bak 's/test/mytest/g' file 替換前先生成一個備份文件file.bak
參考:http://www.gnu.org/software/sed/manual/html_node/Overview.html#Overview