2019-06-19

一. 三劍客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 修改替換指定的整行信息?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容