目錄
緒論
1、sed的原理:讀取 執行 顯示 三個過程
2、sed 文本內容處理工具,文件過大怎么辦?
3、sed的操作選項
3.1 常用選項
3.2 操作符
3.3?行號的范圍打印
3.4 對包含指定字符串的內容進行打印
3.5 刪
3.5.1 正則表達式刪除
3.6 替換
3.6.1 字母字符的大小寫替換
3.7 整行替換和單字符替換
3.8 增加
3.9?sed命令當中字符串的位置進行交換
3.10?取日志范圍?
緒論
sed:類似于vim就是一個文本編輯器,按行來編輯和處理,針對文件內容的行進行處理
主要作用是對文本內容進行增刪改查,sed可以支持正則表達式,支持擴展正則表達式
1、sed的原理:讀取 執行 顯示 三個過程
讀取:讀取文本內容后,讀取到的內容存放到臨時的緩沖區,模式空間
執行:在模式空間,根據讀取的文本內容,按行執行,除非指定引號,否則會遍歷所有行,從上往下執行
顯示:執行完后,把執行結果打印,如果要改變生效,模式空間被修改的內容會寫入到指定的文件當中,只是操作,但是不最終寫入文件,只展示結果,展示完后,模式空間的數據立即刪除
2、sed 文本內容處理工具,文件過大怎么辦?
split拆分文件
或者通過? cat? 文件名? |? sed? 處理(只適用于中興文件,大型文件還是先分割)
3、sed的操作選項
sed -e '操作'? 文件1 -e '操作' 文件2
3.1 常用選項
-e :條件操作選項
-f :指定腳本文件來處理輸入的文件內容,把命令寫在腳本里,用腳本里的命令來處理第二個文件里面的內容
-i :立即生效 慎用
-n :顯示script處理之后的結果
3.2 操作符
s 替換指定字符
d? 刪除指定的行
a? 增加在當前的下面插入指定內容
i? 增加,在指定行的上面插入指定的內容
c? 替換,整行替換
y? 替換字符,但是替換前后的字符長度必須一致
p? 打印
r? 擴展正則
sed的核心就是改,刪 ,增 查是沒有grep強大?
sed '? '? :查看打印功能
eg:sed? '? '? /etc/passwd
只輸出行號:sed? -n? '='? ky30.txt
輸出行號和內容:sed? -n? '=;p'? ky30.txt
打印指定行:sed? -n? '2p'? ky30.txt
直接打印最后一行:sed? -n? '$p'? ky30.txt
3.3?行號的范圍打印
sed? -n? '1,3p'? ky30.txt? 打印1到3行
sed? -n? '2,+2p'? ky30.txt? 打印第2到第4行
?sed? -n? '2p;$p'? ky30.txt? 打印第二行和最后一行
3.4 對包含指定字符串的內容進行打印
sed? -n? '/o/p'? ky20.txt? 把所有包含o的行會全部打印
sed? -r? -n? '/(99:){2}/p'? /etc/passwd? 把有99的那行打印
3.5 刪
sed? "d"? ky30.txt
eg:怎么不進人文件就可以刪除文件的內容(免交互刪除)
sed? -i? 'd'? ky30.txt或者 cat? /dev/null? >? ky30.txt
指定行號進行刪除:
sed? -n? '3d;p'? ky30? 刪除第三行,打印剩余行內容
sed? -n? '|d;3d;p'? ky30.txt
sed? '/big/!d'? ky30.txt? 除了big這行不刪除
3.5.1 正則表達式刪除
sed? '/^$'? ky30.txt? 刪除空行
3.6 替換
s:替換字符串
c:整行替換
y:單字符替換,前后長度保持一致
sed? -n? 's/root/test/p'? /etc/passwd? 替換每行的第一個root為test,想要替換第二個在p前面加一個2,想要替換全部在p前面加個g
3.6.1 字母字符的大小寫替換
sed? 's/[a-z]/\u&/'? ky30.txt? 首字母變大寫了
sed? 's/[a-z]/\u&/g'? ky30.txt所有字母都生效
l&轉換成小寫的特殊符號,在使用時,需要轉義符\
eg:sed? 's/[A-Z]\l&/g'? ky30.txt
?u&轉換成大寫的特殊符號,在使用時,需要轉義符\
g 全部替換,如果不加,只會更改首字符
3.7 整行替換和單字符替換
sed? '/exy/c? zhangsan is? sexy'? ky30.txt? 將exy替換成zhangsan? is? sexy
字符串替換前后長度要相同:y
sed? 'y/a/1/'? ky30.txt? 將a換成1
3.8 增加
a:在下一行添加
i:在上一行添加
r:?在行后讀入指定文件內容
eg:sed? '/123/a? 456'? ky30.txt
sed? '/bighouse/r? ky31.txt'? ky30.txt? ?前面為要讀的文件? 后面為本文件
3.9?sed命令當中字符串的位置進行交換
sed? -r? 使用擴展正則
echo? ky30lt? |? sed? -r? 's/(ky30)(lt)/\2\'p
漢字換位:
echo? 漢字? |? sed? -r? 's/(.)(.)/\2\1/'
sed? -f:?指定腳本文件來處理輸入的文件內容,把命令寫在腳本里,用腳本里的命令來處理第二個文件里面的內容
3.10?取日志范圍?
?