sed簡介:流編輯工具冰垄,用來對文本進行過濾與替換操作掏熬。
sed流程:sed通過一次僅讀取一行內(nèi)容來對某些指令進行處理后輸出捻浦。
1、sed通過文件或管道讀取文件內(nèi)容屋确,但sed默認并不直接修改源文件纳击,而是將讀入的內(nèi)容復(fù)制到緩沖區(qū)中续扔,稱之為模式空間。
2评疗、所有的指令操作都是在模式空間找那個進行
3测砂、sed根據(jù)相應(yīng)的指令對模式空間中的內(nèi)容進行處理并輸出結(jié)果,默認輸出至標準輸出(即屏幕上)百匆。
sed基本語法格式:
用法:sed[選項]...{腳本指令}[輸入文件]...
選項: -version 顯示sed版本
-help :顯示幫助文檔
-n,-quiet,-silent靜默輸出砌些,默認情況下,sed程序在所有的腳本指令執(zhí)行完畢后加匈,將自動打印模式空間中的內(nèi)容存璃。
-e script允許多個腳本指令被執(zhí)行
-f script-file從文件中讀取腳本指令,對編寫自動化腳本程序很實用
-i ,-in-place 該選項直接修改源文件
-l N 該選項指定l指令可以輸出的行長度雕拼,l指令為輸出非打印字符纵东。
-posix 禁用GNU sed擴展功能。
-r 在腳本指令中使用擴展正則表達式啥寇。
-s偎球,-separate 默認情況下,sed將把輸入的多個文件名作為一個長的連續(xù)的輸入流辑甜。而GNU sed則允許把它們當作單獨的文件衰絮。
-u,-unbuffered 最低限度的緩存輸入與輸出
a磷醋,append表示追加指令猫牡;
i,insert表示插入指令邓线;
d淌友,delete表示刪除指令;
s骇陈,substitution表示替換指令震庭。
sed腳本指令的基本格式是:
[地址,即路徑]命令(有些命令僅可以對一行操作,有些可以對多行操作)你雌,命令也可以用花括號進行組合归薛,使命令序列可以作用于同一個地址。
address{
command1
command2
command3
}
比如:
sed '2a TYPE=Ethernet' test.txt #第二行后追加TYPE=Ethernet
sed '3i TYPE=Ethernet' test.txt #第二行前追加TYPE=Ethernet
sed 's/yes/no/g' test.txt #將樣本文件中的所有yes替換為no
sed '3,4d' test.txt # 刪除第三匪蝙、第四行的內(nèi)容
將樣例文本中的第二個<body>替換為</body>,編寫sed腳本主籍,即將body替換為/body,但僅替換第二個body
cat sed.sh內(nèi)容如下:
/body/{
s::\/body:2
}
執(zhí)行sed命令: sed -f sed.sh test.txt
行編輯器介紹
- Vim和sed awk的區(qū)別
交互式與非交互式
文件操作模式與行操作模式 - sed的基本用法演示
sed :一般用于對文本內(nèi)容做替換逛球,sed '/user1/s/user1/u1/' /etc/paswd
sed的基本工作方式
sed的基本工作方式是:
- 將文件以行為單位讀取到內(nèi)存(模式空間)
- 使用sed的每個腳本對該行進行操作
- 處理完成后輸出該行
sed的替換命令s
sed的替換命令s:
- sed 's/old/new' filename
- sed -e 's/old/new' -e 's/old/new' filename
- sed -i 's/old/new' 's/old/new' filename
帶正則表達式的替換命令s:
sed 's/正則表達式/new' filename
sed -r 's/擴展正則表達式/new/' filename
sed的替換命令的加強版
1千元、全局替換 : s/old/new/g ,其中g(shù)為全局替換颤绕,用于替換所有出現(xiàn)的次數(shù)幸海; /如果和正則匹配的內(nèi)容沖突可以使用其他符號祟身,如 :s@old@new@g
2、標志位
- 表示數(shù)字物独,第幾次出現(xiàn)才進行替換袜硫,如 :
s@old@new@2
- g 表示全局替換,如 :
s@old@new@g
- p打印模式空間的內(nèi)容
sed -n 'script' filename 阻止默認輸出
- w file將模式空間的內(nèi)容寫入到文件
尋址
分組
sed腳本文件
sed的多行模式
為什么要有多行模式: 配置文件一般有單行出現(xiàn)挡篓,但也有使用json或XML格式的配置文件婉陷,為多行出現(xiàn)。
多行模式處理命令N官研、D秽澳、P
- N: 將下一行加入模式空間
-D: 刪除模式空間中的第一個字符到第一個換行符
-P: 打印模式空間中的第一個字符到第一個換行符