1. 程式人生 > >Sed文字處理工具總結

Sed文字處理工具總結

文字處理工具sed

sed工具
用法:
sed[option]… ‘script’ inputfile…
用法: 不加-i時僅僅是列印到螢幕顯示,加-i可以修改檔案,一般加-i.bak備份一個.bak檔案
常用選項:
-n不輸出模式空間內容到螢幕,即不自動列印
-e多點編輯
-f /PATH/SCRIPT_FILE從指定檔案中讀取編輯指令碼
-r支援使用擴充套件正則表示式
-i.bak備份檔案並原處編輯
script:
‘地址命令’
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
.#: 指定的行,$:最後一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址範圍:
.#,#
.#,+#
/pat1/,/pat2/
.#,/pat1/
(4) ~:步進

編輯命令:

d刪除模式空間匹配的行,並立即啟用下一輪迴圈
p列印當前模式空間內容,追加到預設輸出之後
a[\]text在指定行後面追加文字,支援使用\n實現多行追加
i[\]text在行前面插入文字
c[\]text替換行為單行或多行文字
w /path/file儲存模式匹配的行至指定檔案
r /path/file讀取指定檔案的文字至模式空間中匹配到的行後
=為模式空間中的行列印行號
!模式空間中匹配行取反處理


例子
sed‘2p’ /etc/passwd
sed–n ‘2p’ /etc/passwd 顯示第2行
sed–n ‘1,4p’ /etc/passwd 顯示1-4行
sed–n ‘/root/p’ /etc/passwd 顯示帶有root的行
sed–n ‘2,/root/p’ /etc/passwd 從2行開始
sed-n ‘/^$

/=’ file 顯示空行行號 =代表行號
sed–n –e ‘/^KaTeX parse error: Expected group after '^' at position 10: /p’ –e ‘/^̲/=’ file
sed–n –r ‘/#|$/d’ + file 刪除該檔案中帶#註釋和空白的行
sed‘/root/a\superman’ /etc/passwd行後
sed‘/root/i\superman’ /etc/passwd行前
sed‘/root/c\superman’ /etc/passwd代替行
s///查詢替換,支援使用其它分隔符,[email protected]@@,s###
替換標記:
g行內全域性替換
p顯示替換成功的行
w /PATH/FILE將替換成功的行儲存至檔案中
nl 可以顯示行號


sed -n ‘/^u/p’ /data/f1 打印出data下的f1檔案中以u開頭的行
sed -n '3,9’只顯示3-9行
sed -n ‘/ftp/,/lib/’ passwd 顯示passwd檔案中以ftp開頭和以lib開頭之間的行
sed -n ‘1~2p’ 列印奇數行
sed -n ‘2~2p’ 列印偶數行
sed -i ‘/^SELINUX=/cSELINUX=disabled’ /etc/selinux/config 把config檔案中的SELINUX=enforcing改為SELINUX=disabled 禁用selinux
sed -n ‘s/tmpfs/tempfilesystem/g’ /etc/fstab 將檔案fstab中的tmpfs替換為 tempfilesystem,並且只顯示替換結果,s為查詢替換,p為只顯示替換的那一行
sed -r ‘s/[[:alpha:]]/\u&/g’ +檔案 [[:alpha:]]意思為字母,u為大寫,&表示搜尋到的內容,用u&替換原內容,把所有的字母替換為大寫
sed -r ‘s/[[:alpha:]]/\l&/g’ +檔案 [[:alpha:]]意思為字母,l為小寫,&表示搜尋到的內容,用u&替換原內容,把所有的字母替換為小寫
sed -r ‘s/[#]/#&’ +檔案 將檔案中不是#開頭的行加上#並顯示,其中&代表被搜尋出來的內容,等於用#&替換了原來的內容,加-i可以直接修改 …(重點)
sed -nr ‘/.CMDLINE_LINUX./s#(.*)"#\1 net.ifnames=0"#p’ /etc/default/grub 在帶有CMDLINE_LINUX的一行後加上net.ifnames=0 僅在7系統需要修改 …修改
s///查詢替換,支援使用其它分隔符,[email protected]@@,s###
替換標記:
g行內全域性替換
p顯示替換成功的行
w /PATH/FILE將替換成功的行儲存至檔案中