• sed 行編輯器,在內存緩存中一行一行處理,可以批量處理文件
○ 默認不修改文件
○ -n 自動關閉打印
○ -i 修改文件
○ -r 擴展正則表達式
○ -e 多點編輯,同時操作
○ p 打印
○ d 刪除
○ a\ 下一行追加
○ i\ 上一行插入
○ c\ 替換行
• sed -n '1p' flie 只打印第一行(關閉自動打印)
• sed -n '2p' file 打印第二行
• ifconfig | sed -n '2p'
• ifconfi | sed -n '3,5p' 打印3-5行
• sed -n'/^[^#]/p' file 打印非井號開頭的行
• sed '/^#/d' file 刪除#開頭的行
• sed -i.bak '/^#/d' file 先備份文件為.bak,再刪除文件
• sed 10 | sed -n '1~2p' 打印奇數行
• sed 10 | sed -n '2~2p' 打印偶數行
• sed 10 | sed '5a\XXXX' 在第五行下一行追加XXX
• sed 10 | sed '5a\XXXX\nYYY' 在第五行下一行追加兩行
• sed 10 | sed '5,8a\XXXX' 在第5-8行下一行追加XXX
• sed 10 | sed '5,8c\XXXX' 在第5-8行替換成XXX
• sed 10 | sed '5!d' 除了第五行全刪除
• sed 's@/sbin/nologin@/test/test@' file 把/sbin/nologin替換為/test/test
• sed 'GRUB_CMDLINE_LINUX/s/"$/ net.ifnames=0&/' /etc/default/grub 追加修改網卡名稱顯示信息
○ 查找 sed 'GRUB_CMDLINE_LINUX'
○ 替換 s/A/B/ A替換成B
• sed -r 'GRUB_CMDLINE_LINUX/s/(.*)"/\1 net.ifnames=0 "/'/etc/default/grub
• ifconfig eth0 | sed -n '2p' | sed 's/^.*net //' | sed 's/ netmask,*//' 獲取ip地址
• ifconfig eth0 | sed -n '2p' | sed -e 's/^.*net //' -e 's/ netmask,*//' 獲取ip地址
○ sed 's/^.*net //' net之前替換為空
○ sed 's/ netmask.*//' netmask之后替換為空
• sed -r 's/^#(NameVirtualHost)/\1/' /etc/httpd/conf/httpd.conf 刪除單行#
• sed -r '@^#<virtualHost@,@</#virturlHost>@s@#@@' /etc/httpd/conf/httpd.conf 刪除指定范圍的#
sed高級用法
模式空間:sed命令每次處理一行記錄所用的空間
保持空間:模式空間處理的數據沒有完全結束,可以放到保持空間,臨時中轉站
P:打印模式空間開端至\n內容,並追加到默認輸出之前
§
h: 把模式空間中的內容覆蓋至保持空間中
§ sed 10 | sed '1!G;h;$!d' 倒序(不是第一行執行h,不是最后一行刪除)
H:把模式空間中的內容追加至保持空間中
g: 從保持空間取出數據覆蓋至模式空間
G:從保持空間取出內容追加至模式空間
x: 把模式空間中的內容與保持空間中的內容進行互換
n: 讀取匹配到的行的下一行覆蓋至模式空間
§ sed 10 | sed -n 'n;p' 打印偶數行
N:讀取匹配到的行的下一行追加至模式空間
§ sed 10 | sed 'N;D' 打印最后一行
d: 刪除模式空間中的行
D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,並不會讀取新的輸入行,而使用合成的模式空間重新啟動循環。如果模式空間不包含換行符,則會像發出d命令那樣啟動正常的新循環