sed 簡單用法

sed 簡單用法

sed 簡單用法

sed 是一種線上的、非互動式的編輯器,它一次處理一行內容。處理時,先把當前處理的行內容儲存在臨時緩衝區中,稱為“模式空間”(pattern space),之後再用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容列印到螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。注意:模式空間的內容和 AWK 中的 $0 是一樣的,處理每行的時候,都會被重新賦值為當前行的內容檔案內容並沒有改變,除非你使用重定向儲存輸出。可以加引數 i 修改原檔案Sed主要用來自動編輯一個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等

語法格式:單個檔案sed [options] ‘[匹配模式] sed 的內部命令’ file1多個檔案sed [options] ‘[匹配模式] [sed 的內部命令]’ file1 file2sed和grep不一樣,不管是否找到指定的模式,它的退出狀態都是0只有當命令存在語法錯誤時,sed的退出狀態才是非0

支援正則表示式 加引數 -r sed -r

p是 sed 的內部命令,是 列印(輸出) 的作用

-n 僅顯示處理後的結果 sed -rn ‘/root/p’ file

-e 可以指定多天指令 如刪除和替換 sed -e ‘1,3 d’ -e ‘s/root/shark/’ 檔案 等同於 sed ‘1,3 d; s/root/shark/’ 檔名

加引數i 修改原檔案

-a 追加命令 $a 表示追加到最後一行 a 表示在每一行後面都追加 4a 表示在第4 行後面追加sed -r ‘$a 內容’ 檔案 sed -r ‘4a 內容’ 檔案 或者 sed -r ‘$a\內容’ 檔案 sed -r ‘4a\內容’ 檔案

插入命令:i# sed -r ‘2i\1111111111111’ /etc/hosts# sed -r ‘2i111111111\> 2222222222\> 3333333333’ /etc/hosts 插入多行內容 修改命令:csed -r ‘2c\1111111111111’ /etc/hosts 或者 sed -r ‘2c 1111111111111’ /etc/hosts 就是把第二行的內容改成1111111111111sed -r ‘/^nnn/c mmm’ file 把nnn開頭的行 修改成mmm

搜尋替換> 搜尋每一行,找到有 root 的,把第一個替換為 sharksed -r ‘s/root/shark/’ mypasswd> 搜尋每一行,找到所有的 root 字元,進行全域性替換為 `shark`sed -r ‘s/root/shark/g’ mypasswd> i 是同時忽略大小寫sed -r ‘s/root/shark/gi’ mypasswd > 找到含有 root 的進行刪除sed -r ‘/root/d’ mypasswd> 可以使用不同的 字元 作為界定符號,注意進行轉義sed -r ‘\#root#d’ mypasswd 找到含有 root 的進行刪除其他界定符用在 s 搜尋替換時不必轉義sed -r ‘s#root#shark#’ mypasswd

> 全部分刪除sed -r ‘d’ mypasswd> 第 3 行刪除sed -r ‘3 d’ mypasswd> 第 1 行到第 3 行都刪除sed -r ‘1,3 d’ mypasswd> 含有 root 字串的行刪除sed -r ‘/root/ d’ mypasswd> 從含有 root 字串的行開始匹配,一直刪除到 第 5 行sed -r ‘/root/,5 d’ mypasswd> 從含有 halt 的行開始刪除,並刪除此行之後的 2 行,就是總共刪除 3 行sed -r ‘/halt/,+2 d’ mypasswd> 含有 root 的行不刪除,其他都刪除sed -r ‘/root/ !d’ mypasswd> 使用行號除以 2 ,餘數是 1 的行刪除sed -r ‘1~2 d’ mypasswd> 使用行號除以 2, 餘數 是 0 的 打印出來sed -rn ‘0~2 p’ mypasswd> 試試下面這個, 就是 每次處理的行號是被除數,第二個數是除數,第一數是 餘數sed -rn ‘0~3 p’ mypasswd

sed -rn ‘s/[0-9][0-9]/&。5/’ mypasswd //&代表在查詢串中匹配到的所有內容相當於在找到的內容後面加 。5sed -r ‘s/(no)login/\1不可登入/’ mypasswd \1 呼叫前面括號內的內容部分輸出為bin:x:1:1:bin:/bin:/sbin/no不可登入

刪除配置檔案中 # 號註釋的行sed -ri ‘/^#/d’ file。conf刪除開頭的一個或者多個 空格或者 Tab 鍵sed -ri ‘/^[ \t]*#/d’ file。confYUM 源修改sudo sed -ri s/^#baseurl/baseurl/g /etc/yum。repos。d/CentOS-Base。reposudo sed -ri s/^mirrorlist/#mirrorlist/g /etc/yum。repos。d/CentOSBase。repo空格和table鍵 ‘/^#/d’ [ \t] * 空格和table刪除配置檔案中//號註釋行sed -ri ‘\Y^[ \t]*//Yd’ file。conf刪除無內容空行- 開頭和結尾之間什麼都沒有的行- 開頭和結尾之間有多個空格的行- 開頭和結尾之間有多個 Tab 鍵的行sed -ri ‘/^[ \t]*$/d’ file。conf刪除註釋行及空行:以下 3 中效果一樣,挑一個自己喜歡的sed -ri ‘/^[ \t]*#/d; /^[ \t]*$/d’ /etc/vsftpd/vsftpd。confsed -ri ‘/^[ \t]*#|^[ \t]*$/d’ /etc/vsftpd/vsftpd。confsed -ri ‘/^[ \t]*($|#)/d’ /etc/vsftpd/vsftpd。conf修改檔案:sed -ri ‘$a\chroot_local_user=YES’ /etc/vsftpd/vsftpd。confsed -ri ‘/^SELINUX=/cSELINUX=disabled’ /etc/selinux/configsed -ri ‘/UseDNS/cUseDNS no’ /etc/ssh/sshd_configsed -ri ‘/GSSAPIAuthentication/cGSSAPIAuthentication no’ /etc/ssh/sshd_config給檔案行添加註釋:sed -r ‘2,6s/^/#/’ a。txt使用小括號進行分組,可以有多個分組, 後面可以使用 \1 獲取到第一個分組的內容 sed -r ‘2,6s/(。*)/#\1/’ a。txtsed -r ‘2,6s/。*/#&/’ a。txt &匹配前面查詢的內容sed -r ‘3,$ s/^#*/#/’ a。txt 將行首零個或多個#換成一個#sed -r ‘30,50s/^[ \t]*#*/#/’ /etc/nginx。confsed -r ‘2,8s/^[ \t#]*/#/’ /etc/nginx。confsed中使用外部變數var1=11111# 無效sed -r ‘3a$var1’ /etc/hosts# 正確sed -r “3a$var1” /etc/hosts# 有效sed -r 3a$var1 /etc/hosts# 報錯sed -r “$a$var1” /etc/hosts# 有效,但是中間不能有空格sed -r ‘$a’“$var1” /etc/hosts# 有效, 將第一個 $ 進行轉義sed -r “\$a $var1” /etc/hosts