一. 三劍客sed命令
sed - stream editor for filtering and transforming text
? ? ? ? ? 流編輯器工具(文件字符流進(jìn)行處理編輯)
作用: 擅長(zhǎng)對(duì)文件的行進(jìn)行處理? 修改編輯文件內(nèi)容
語(yǔ)法:sed [參數(shù)] '條件 指令(如何處理)'? 文件信息
? ? ? ? ? ? sed -n '/oldboy/p'? oldboy.txt
sed命令執(zhí)行原理 (圖)
? ? ? 三劍客命令:按行處理文件信息
? ? sed命令操作實(shí)踐
? ? sed命令能完成什么事情: 增? ? 刪? ? 改? ? 查 ( 處理文本文件? 配置文件-sed? 日志文件-grep/awk)
二.? 如何查詢(xún)信息:
1.? 需求:查詢(xún)單行信息:
? ? ? ? ? 01. 將第3行信息進(jìn)行顯示
? ? ? ? ? ? ? ? ?sed -n '3p' person.txt
? ? ? ? ? 02. 將有oldboy的行進(jìn)行顯示
? ? ? ? ? ? ? ? ? sed -n '/oldboy/p' person.txt
2.? 需求:查多行信息? ? ? ?-n? 取消默認(rèn)輸出? ? ? ? ? ? p? print? 輸出信息
? ? 01. 將第3行~第5行信息進(jìn)行顯示? 區(qū)間用到: ,
? ? ? ? ? ? sed -n '3,5p' person.txt
? ? ? 02. 將oldboy ~ alex信息進(jìn)行顯示? ? --注意的是會(huì)顯示匹配文件的一個(gè)貪婪性
? ? ? sed -n '/oldboy/,/Alex/p' person.txt
3. 只查看第3行和第5行內(nèi)容
? ? ? sed -n '3p;5p' person.txt
? ? 只查看有oldboy和alex信息
? ? ? sed -n '/oldboy/p;/Alex/p' person.txt
三.? 如何刪除文件信息
? ? 01. 將第三行信息進(jìn)行刪除
? ? ? ? ? sed -i '3d' person.txt? ? ? ? ? ? ? ? -i? 真實(shí)修改文件內(nèi)容? ? ? ? d? delete 刪除文件信息
? ? 02. 將有oldboy信息的行進(jìn)行刪除? ? ? ?
? ? ? ? ? sed -i '/oldboy/d' person.txt ?
? ? 03. 將oldboy和Alex信息的行進(jìn)行刪除?
? ? ? ? ? 方法一: sed '/oldboy/d;/Alex/d' person.txt
? ? ? ? ? 方法二:sed -r '/oldboy|Alex/d' person.txt
四.? 如何增加信息
? ? 01. 在第3行后面增加新的一行? 內(nèi)容 oldboy62
? ? ? ? ? sed '3a oldboy62' person.txt? ? ? ? ? a? append 在指定條件行的下面添加信息
? ? 02. 在第5行前面增加新的一行? 內(nèi)容 oldboy62
? ? ? ? ? sed '5i oldboy62' person.txt? ? ? ? ? i? insert 在指定條件行的上面添加信息
? ? 03. 在第3行前面加oldboy62,同時(shí)在第5行后面加oldboy62
? ? ? ? ? sed -e '3ioldboy62' -e '5aoldboy62' person.txt? ? ? -e? 識(shí)別多個(gè)指令信息,可以讓多個(gè)指令同時(shí)執(zhí)行
? ? 04. 在文件最后一行后面,添加多行信息
? ? ? ? ? sed -e '$aoldboy62' person.txt? ? ?
? ? ? ? ? sed '$aoldboy62\noldboyedu62' person.txt
五. 替換修改文件內(nèi)容:
? ? 01. 將123456 信息 顯示 為 <123456>
? ? ? ? 方法1: echo 123456|sed -r 's#(.*)#<\1>#g'
? ? ? ? ? 方法2:echo 123456|sed? 's#.*#<&>#g'
? ? ? ? ? 方法3:echo 123456|sed -r 's#([0-9]+)#<\1>#g'
? ? 02. 將123456 信息 顯示 為 <123><456>
? ? ? ? ? echo 123456|sed -r 's#([0-9]{3})#<\1>#g'
? ? ? ? ? echo 123456|sed -r 's#(.{3})#<\1>#g'
? ? ? ? 03? . 將123456 信息 顯示 為 <1><2><3><4><5><6>
? ? ? ? ? echo 123456|sed -r 's#([0-9])#<\1>#g'
? ? ? ? ? echo 123456|sed -r 's#([0-9]{1})#<\1>#g'
? ? ? ? ? echo 123456|sed -r 's#(.)#<\1>#g'
六.? ? 修改文件內(nèi)容:?
? ? ? ? 使用-i參數(shù)問(wèn)題:
? ? 01. -i.bak 表示對(duì)源文件進(jìn)行備份? -- i參數(shù)后面不能跟其他參數(shù)
? ? ? ? sed -ri.bak 's#(.*)#<\1>#g' oldboy.txt
? ? ? ? 查看: ll oldboy.txt*
? ? 02. 在利用-i替換文件內(nèi)容信息,-i參數(shù)和-n參數(shù)一定不能同時(shí)使用
? ? ? ? 替換的錯(cuò)誤方法
? ? ? ? sed -n '/Alex/s#COO#CEO#gp' person.txt
? ? ? ? sed -ni.bak '/Alex/s#COO#CEO#gp' person.txt
? ? ? ? 正確替換方法
? ? ? ? sed -i '/Alex/s#COO#CEO#g' person.txt
? ? 02. 批量修改文件擴(kuò)展名稱(chēng)
? 方法一:
? ? find /oldboy -maxdepth 1 -type f -name "oldboy*.txt"|sed -r 's#(.*)txt#mv \1txt \1jpg#g'|bash
? ? 方法二:
? ? [root@oldboyedu62.com.cn /oldboy# ls oldboy*.txt|xargs -n1|sed -r 's#(.*)txt#mv & \1jpg#g'
? ? 方法三:利用rename
? ? #rename "修改文件名稱(chēng)什么信息" "修改成什么"? 修改什么文件
? ? rename ".txt" ".jpg" oldboy*.txt
03. 取出文件權(quán)限數(shù)值信息
? ? 方法一:
? ? stat /etc/hosts|sed -nr '4s#^A.*s: \((.*)/-.*$#\1#gp'
? ? stat /etc/hosts|sed -n '4s#^A.*s: (\(.*\)/-.*$#\1#gp'
? ? 0644
? ? 方法二:權(quán)限
? ? ? ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'
? ? ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'|tr "rwx-" "4210"
七. 特殊替換文件內(nèi)容信息:
? ? ? sed -n '3s/#103/103/gp' person.txt
? ? ? sed -n '3s#\#103#103#gp' person.txt
八. 修改整行信息:
? ? sed '3coldboy62' person.txt? ? ? c? change 修改替換指定的整行信息?
九 . 取消空行不要顯示
方法一:
? ? sed '/^$/d' person.txt
方法二:
? ? ? sed -n '/^$/!p' person.txt
十 . 擴(kuò)展:利用sed命令顯示文件行號(hào)信息
? ? sed '=' person.txt|xargs -n2
04. 課程知識(shí)總結(jié)
? ? 1)掌握sed命令語(yǔ)法結(jié)構(gòu)? sed 參數(shù) '條件 指令' 文件信息?
? ? ? 參數(shù):
? -n? 取消默認(rèn)輸出
? -i? 真實(shí)修改文件內(nèi)容
? -e? 識(shí)別多個(gè)指令信息,可以讓多個(gè)指令同時(shí)執(zhí)行
? -r? 識(shí)別擴(kuò)展正則符號(hào)信息
? ? ? 指令:
? ? ? p? print? 輸出信息
? d? delete 刪除文件信息
? i? insert 在指定條件行的上面添加信息
? a? append 在指定條件行的下面添加信息
? s? substitute? 取代==替換
? g? global 將所有匹配的信息都做替換(沒(méi)有 將一行中第一個(gè)匹配的信息做替換)
? c? change 修改替換指定的整行信息?