sed

Stream EDitor, 行編輯器
sed是一種流編輯器,它一次處理一行內容。處理時,把當前 處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后 ,把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環 。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空 模式空間,但不會清空保留空間。這樣不斷重復,直到文件末 尾。文件內容并沒有改變,除非你使用重定向存儲輸出。
功能:主要用來自動編輯一個或多個文件,簡化對文件的反復 操作,編寫轉換程序等
參考: http://www.gnu.org/software/sed/manual/sed.html

用法:
sed [option]… ‘script’ inputfile…
常用選項:
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak: 備份文件并原處編輯
script:
‘地址(文件行數)命令’
地址定界:
(1) 默認不給地址:對全文進行處理
(2) 單地址: #: 指定的行,$:最后一行 /pattern/(模式匹配):被此處模式所能夠匹配到的每一行
(3) 地址范圍: #,# #,+# /pat1/,/pat2/ #,/pat1/ (4) ~:步進 1~2 奇數行 2~2 偶數行
#sed “2p” /etc/issue
打印第二行兩遍
sed01
#sed -n “2p” /etc/issue
只打印第二行
sed02
#cat -n /etc/passwd|sed -n “1,3p”
只打印1,3行
sed03
#cat -n /etc/passwd|sed “1,10d”
刪除1-10行、
04sed
#cat -n /etc/passwd|sed -n ‘$p’
打印最后一行
sed05
#cat -n /etc/passwd |sed -n “1,+4p”
打印1+4行
sed
06
#sed -n ‘/^r/,/^a/p’ /etc/passwd
打印從 r開頭到a開頭的之間的所用行 注意:sed命令會把文件里所有符合r開頭的行到后面所有的行都會打印一遍
07sed
#cat -n /etc/passwd|sed ‘2~2d’
用到的命令:(d)刪除
刪除偶數行
sed08
#cat -n /etc/passwd |sed -n “1~2p”
只打印奇數行
打印偶數行
用到高級用法:n
#cat -n /etc/passwd |sed -n ‘n;p’
09
sed
#sed “9a\ ailas cdent=’cd /etc/sysconfig/netwark-scripts/”
在~/。bashrc文件的第九行添加別名ailas cdent=’cd /etc/sysconfig/netwark-scripts/”
10
sed
注意:以上內容都只是在屏幕上打印出來了文件并沒有真正被改掉
#sed -i.bak “9a\ailas cdent=’cd /etc/sysconfig/netwark-scripts/” ~/.bashrc
加上-i.bak 之后會默認在家目錄里創建一個與源文件一樣的文件但是會加-i 后面的字符為文件后綴例如這張圖上-i后面有個.bak那么這個就是這個文件的后綴,而后面的 “9a\ a是表示在第九行后面 插入一行
sed11
這回是真正改了文件了 ,所以 -i 選項用起來一定要謹慎
sed12
#sed “/^# Source/ixxxxx” ~/.bashrc
在上一行添加內容:i
13
在~/.bashrc 的# Source 的這一行的上一行添加一行字符 (//)這個表示模式。在這個模式可以使用正則表達式 那么我這里表示的是# Source的行的上一行添加字符,那么這里的(i)的作用就是在上一行添加字符 ,當然這只是顯示并沒有真正改文件
sed#sed ‘/^SELINUX=/c SELINUX=disabled’ /etc/selinux/config
替換內容 :c
替換SELINUX=這一行的內容
sed14
被改后的文件
sed15
讀入文件內容
用到命令:r
#sed “/^root/r /etc/issue” /etc/passwd
r 的功能就是讀取文件內容添加到指定行的下一行,注意:r 讀取的內容會添加到所有匹配的行下面,也就是說如果這個文件里有10root開頭的行,那么每一行下面都會有被讀取文件的內容
sed16
打印匹配到的字符的行號
#sed “/^alias/=” ~/.bashrc
用到的命令:=
sed17
打印除了以alias開頭的其他行
用到的命令 : !
注意:這里不能用雙引號,因為雙引號能識別里面的特殊字符,這里面的!號就被識別成了調用上一條命令
sed
把文件中想過濾出來的內容指定一個文件中
#sed ‘/^alias/w /app/.bashrc.bak‘ ~/.bashrc
用到的命令:w
這里的w功能是把~/.bashrc文件中的所有以alias開頭的行存放到/app/下的.bashrc.bak這個文檔里
sed17
/app/.bashrc.bak內容
sed20
打印以某個字符串結尾的行
#sed -n ‘/bash$/p’ /etc/passwd
用到的命令:-n ,p
打印/etc/passwd 文件里的所有以bash結尾的行
sed22

重難點
s///:查找替換,支持使用其它分隔符,s@@@,s###
替換標記:
g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
搜索替代:
用到命令:s///,(@@@,###)這些符號都可以作為分隔符
錯誤做法
sed ‘s@/bin/bash$@/sbin/nolongin$@’ /etc/passwd (錯誤)
23
注意第一個之第二個@之間代表正則表達式也是搜索內容,第二個到地三個@之間代表字符串也就是替代內容,這里錯就錯在/sbin/nolongin后面帶了一個$導致內容替換之后多了一個$
sed
正確做法
#sed ‘s@/bin/bash$@/sbin/nolongin@’ /etc/passwd
sed24
分組正則表達式,以及后向引用
#sed -r ‘s@(/bin/bash$)@###\1$$$$@’ /etc/passwd
前面@(/bin/bash$)@是把(/bin/bash$)作為一個分組 而后面@###\1$$$$@中間的這個\1表示后項引用 前面的 /bin/bash作為內容 而###\1表示在/bin/bash前面加上###,\1$$$就表示在/bin/bash后面添加$$$
25
sed
替換etc/selinux/config文件中的SELINUX=enforcing
#sed -r ‘s@(^SELINUX=)enforcing@\1disabled@’ /etc/selinux/config
把(^SELINUX=)作為一個分組,后面的 enforcing就是不要的內容,而這個\1就是調用前面的分組的內容(^SELINUX=),那么\1后面的disabled就是在SELINUX=后面添加的內容
結果就會是SELINUX=disabled 把之前的 enforcing給覆蓋了
sed26
取centos6.ip地址
#ifconfig eth0|sed -n ‘2p’|sed -r ‘s@.*inet addr:(.*) Bcast.*@\1@’
sed27
#ifconfig eth0|sed -nr ‘2p;s@.*inet addr:(.*) Bcast.*@\1@p’
這條命令是把兩條命令合并成一條了
sed28
替換GRUB_DISABLE_RECOVERY=”true” 把true替換成false
原來的狀態
sed29
#cat /etc/default/grub |sed -r ‘s/(GRUB_DISABLE_RECOVERY=”)true”/\1false”/’
sed30
去版本號
①。#cat /etc/centos-release|sed -nr ‘s@.*release (…).*@\1@p’
②。#cat /etc/centos-release|sed -nr ‘s@.*release ([^.]..).*@\1@p’
③。#cat /etc/centos-release|sed -nr ‘s@.*release ([^.]).*@\1@p’
31
sed
取目名
#echo “/etc/sysconfig/network-scripts/ifcfg-ens33″|sed -r ‘s@(^/.*/)(.+)/?@\1@’
(目錄名) (基名)(搜索替代后向引用1)(^/.*/)
取基名
#echo “/etc/sysconfig/network-scripts/ifcfg-ens33″|sed -r ‘s@(^/.*/)(.+)/?@\2@’
(搜索替代后向引用2)(.+)/?
sed32
替換多個內容
用到命令:-e (多點編輯)
sed33
第一個-e ‘s/#Name/Name/ 意思是搜索#NameVirtualHost*:80這一行替換成NameVirtualHost*:80
第二個 -e 表示的是以#<VirtualHost開頭的行到</VirtualHost>開頭的行搜索#替換為空
(模式①) 到 (模式②) 搜索#替換為空
sed

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89389

(0)
xiaoli@xiaoli@
上一篇 2017-12-03
下一篇 2017-12-03

相關推薦

  • 條件測試與基礎運算

    變量類型: 整形 數值型 字符型 byte boolen 單精度 雙精度 變量種類: 環境變量– 對所有進程有效 本地變量– 僅對當前shell有效 局部變量– 僅在函數中的某一段有效 位置變量– $1,$2,$3,$4 特殊變量– $?,$0,$*,$@,$#,$$ 變量命名法則: 1.不能出現程…

    Linux干貨 2017-04-16
  • Linux的文件查找之find的使用

    文件查找   本章節內容:   使用locate命令   使用find命令   使用Gnome搜索工具    一、文件的查找(find和locate的對比): 文件查找:是在文件系統上查找符合條件的文件。 locate find 查找時效性 非實時查找 實時查找 文件索引數據庫 需要依賴查詢系統上預…

    Linux干貨 2016-08-15
  • 網絡管理

                                                 網絡基礎 一.網絡的基本概念 什么是網絡…

    2017-09-02
  • linux系統及簡單使用

    簡介:CentOS(Community Enterprise Operating System)社區企業操作系統,安全和穩定性較好,有優秀的社區支持。   Linux系統的原則: 1、由單一目的的較小的程序程序組成 2、一切皆文件 3、避免捕獲用戶接口 4、配置文件保存在文本中 5、鏈接程序完成復雜的功能   Linux系統安裝: 英文安…

    Linux干貨 2017-07-15
  • 文本處理工具Sed及VIM的使用

    1.文本處理工具Sed   Stream Editor 行編輯器                            圖1-1 sed幫助手冊  用法:      se…

    Linux干貨 2016-08-10
  • ansible配置詳解

    概述     ansible是一款無需在被管理主機上安裝客戶端,基于SSH對多臺目標主機進行同時操作的輕量級的管理軟件,借助各個內部的功能模塊,實現了批量系統配置、批量程序部署、批量運行命令等功能。本篇就介紹一些關于ansible的基礎配置相關的內容,具體包括:     1、an…

    Linux干貨 2016-11-05
欧美性久久久久