Sed,即Stream EDitor的縮寫,是Linux操做系統中常見的文本處理工具,能夠結合正則表達式簡單方便地對文本進行處理。本文將以實例的方式介紹sed的基本用法。正則表達式
基本使用方法bash
基本語法:sed [OPTION] [AddressCommand] FILE1 FILE2......ide
OPTION{經常使用}工具
-n:靜默模式,不顯示模式空間spa
-i:直接修改源文件操作系統
-e SCRIPT -e SCRIPT:能夠同時執行多個腳本3d
-f /APATH/TO/SED_FILE:從文件中讀取腳本,執行blog
-r:表示支持擴展正則表達式字符串
Adress:get
1.StartLine,Endline
如:1,100
2./RegExp/
/^root/:匹配以root開始的行
/$/:最後一行
3./pattern1/,/pattern2/:從第一次被模式1匹配到的行到第一次被模式2匹配到的行
4.LineNumber
指定的行
5.StartLine,+N
從StartLine開始,向後的N行
Command:
d:刪除匹配到的行
例:刪除/etc/fstab文件中的前三行文本
[root@localhost tmp]# sed '1,+2d' /etc/fstab
p:顯示符合條件的行,被匹配到的行會顯示兩次,未被匹配到的行只顯示一次
例:只顯示/etc/fstab文件中以#開頭的行
[root@localhost tmp]# sed -n '/^#/p' /etc/fstab
a \string 在匹配到的行後面增長行
例:在文件/etc/fstab文件中以#開頭的行後面插入hahah這一行
[root@localhost tmp]# sed '/^#/a\hahaha' /etc/fstab
i \string 用法同a,在符合條件的行前面添加新行
r FILE後接文件,在匹配到的行後讀入文件中的內容
例:在/etc/fstab文件中的第一行和第二行讀入文件/etc/passwd
[root@localhost tmp]# sed '1,2r/etc/passwd' /etc/fstab
w FILE:將地址指定的範圍內的行另存至指定的文件中
例:將溫江/etc/fstab中的第一行和第二行保存到/tmp/fstab文件中
[root@localhost tmp]# sed '1,2w/tmp/fstab' /etc/fstab
s/pattern/string/[修飾符] :查找替換,默認只替換每行中第一次被模式匹配到的字符串
修飾符:
g:全局替換
i:忽略大小寫
例:把文件test.txt中以o結尾的字符後面加d
[root@localhost tmp]# sed 's@\(o$\)@\1d@g' test.txt
例:去掉history命令的行首的全部空格
[root@localhost tmp]# history | sed 's@^[[:space:]]*@@g'
綜合實例
例1:刪除/etc/grub.conf文件中行首的空白字符
[root@localhost tmp]# sed 's@^[[:space:]]*@@' /etc/grub.conf
例2:替換/etc/inittab文件中」id:3:initdefault:」一行中的數字爲5
[root@localhost tmp]# sed 's/id:3:initdefault:\(.*\)/id:5:initdefault"\1/g' /etc/inittab
例3:刪除/etc/inittab文件中的空白行
[root@localhost tmp]# sed '/^$/d' /etc/inittab
例4:刪除/etc/inittab文件中開頭的#號
[root@localhost tmp]# sed 's/^#//' /etc/inittab
例5:刪除某文件中開頭的#號但要求#號後面必須有空白字符
原文件內容以下
[root@localhost tmp]# sed 's/#*\([[:space:]]\+\)/\1/' test.txt
例6:刪除某文件中以空白字符後面跟#號的行中的開頭的空白字符及#
例7:取出一個文件路徑的目錄名稱
[root@localhost tmp]# echo "/etc/yum.repo/new.repo" | sed 's@/.*/\(.*\)/.*@\1@'