00. 課程介紹部分
??? 1) sed命令使用方法
01. 課程知識回顧
??? 1)正則符號
?? 基礎(chǔ)正則符號:
?? ^?以什么開頭的信息進行匹配?^oldboy
??? $?以什么結(jié)尾的信息進行匹配?oldboy$
??? ^$表示匹配空行信息
??? .? 匹配任意一個且只有一個字符 grep "."
??? *? 匹配前一個字符連續(xù)出現(xiàn)0次或者多次
??? .* 匹配所有任意信息 類似于通配符*
??? \?將有意義的字符信息,轉(zhuǎn)義成普通字符進行識別?
?? ??-->找出文件中以點結(jié)尾的信息?
?? ??將特殊的擴展正則符號,轉(zhuǎn)換成基礎(chǔ)正則符號
?? ??將沒有意義的字符信息轉(zhuǎn)成有意義的字符
?? ??\n \r \t
?? []匹配多個字符信息,多個字符匹配時,是或者的關(guān)系
?? ??[ok]在文件中找有O的字符信息 找文件中有k的字符信息
?? ??PS:將一個字符串信息,進行拆分成一個一個的字符進行匹配
?? [^]對匹配的字符信息進行排除
?????? [^ok]? 在文件中找有O的字符信息 找文件中有k的字符信息,進行排除不要顯示,顯示其他信息
?????? [^o^k]?? ???
??
?? 擴展正則符號:
?? +?匹配前一個字符連續(xù)出現(xiàn)1次或者多次
?? |?利用豎線可以匹配多個字符串信息
?? ()將多個字符信息匯總成整體,進行過濾
?? ??進行后項引用前項? (oldboy)\1--sed?
??? {} 指定匹配前一個字符連續(xù)出現(xiàn)了多少次?
?????? {n,m}至少連續(xù)n次,最多連續(xù)m次
?????? {n} 匹配只連續(xù)n次的信息
?????? {n,}? 至少連續(xù)n次,最多不限
?????? {,m}? 至少連續(xù)0次,最多m次?
?? ??匹配前一個字符連續(xù)出現(xiàn)0次或者1次
? ? grep命令識別擴展正則: egrep -E
?? sed命令識別擴展正則:? sed -r
?? 學(xué)生問題:
?? 01.文件中有\(zhòng)撬棍信息,如何進行過濾
?? [root@oldboyedu ~]# grep '\\'oldboy_test.txt
??? I \teach \linux.
?? 02.文件中有$符號, 是識別變量, 還是識別普通符號
??? [root@oldboyedu ~]# grep'$oldgirl' oldboy_test.txt
??? $oldgirl
??? [root@oldboyedu ~]# grep"\$oldgirl" oldboy_test.txt
??? $oldgirl
02. sed命令概述說明:
??? sed命令: 字符流編輯工具(行編輯工具)==按照每行中的字符進行處理操作
?? PS:全屏編輯工具vi/vim
?? sed命令作用說明:
?? 1).擅長對行進行操作處理
?? 2).擅長將文件的內(nèi)容信息進行修改調(diào)整/刪除
??? 編寫腳本: 修改文件內(nèi)容信息時
??? 網(wǎng)絡(luò)服務(wù)中的IP地址進行修改:? 50臺主機遷移機房--新機房
??? 第一個步驟: vi ifcfg-eth0
??? 第二個步驟: 重啟網(wǎng)絡(luò)服務(wù)
??? 第三個步驟: 檢查測試??
?
??? 自動修改網(wǎng)卡地址腳本:
?? 第一個步驟: 修改地址
?? sed -i"s#10.0.0.200#10.0.0.201#g" ifcfg-eth0
??
?? 第二個步驟: 重啟網(wǎng)絡(luò)服務(wù)
?? systemctl restart network
??
?? 第三個步驟: 過濾ip
a s eth0 網(wǎng)卡地址信息存儲到一個文件中 共享存儲
???
??? 具體功能作用:
?? 1)文件中添加信息的能力 (增) ok
?? 2)文件中刪除信息的能力 (刪) ok
?? 3)文件中修改信息的能力 (改)
?? 4)文件中查詢信息的能力(查) OK
03. sed命令的語法信息
??? sed [OPTION]...{script-only-if-no-other-script} [input-file]...
??? 命令 參數(shù)??????? 條件+處理= (指令)????????????? 處理文件信息
??? 顯示出文件中有oldboy行的信息
??? sed? -n?????????'/oldboy/p'?????????????????????oldboy.txt??
04. sed命令執(zhí)行原理
??? 參見原理圖
05. sed命令實踐操作:
??? 創(chuàng)建測試環(huán)境:
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF
??? a sed命令查詢信息方法
?? 根據(jù)文件內(nèi)容的行號進行查詢:
?? 測試1: 顯示單行信息
?? [root@oldboyedu ~]# sed -n '3p'person.txt
??? 103,Alex,COO
?? 測試2: 根據(jù)行號信息,輸出多行內(nèi)容(連續(xù))
?? [root@oldboyedu ~]# sed -n '1,3p'person.txt
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
?? 測試3: 根據(jù)行號信息,輸出多行內(nèi)容(不連續(xù))
??? [root@oldboyedu ~]# sed -n'1p;3p' person.txt
??? 101,oldboy,CEO
??? 103,Alex,COO
?
?? 根據(jù)文件內(nèi)容的信息進行查詢:
?? 測試1: 根據(jù)內(nèi)容信息,輸出單行內(nèi)容
?? #將有oldboy行的信息找出來
??? [root@oldboyedu ~]#sed -n '/oldboy/p' person.txt
??? 101,oldboy,CEO
?
??? 測試2: 根據(jù)內(nèi)容信息,輸出多行內(nèi)容(連續(xù))
?? #將有oldboy到alex行的信息都輸出出來
?? [root@oldboyedu ~]# sed -n'/oldboy/,/Alex/p' person.txt
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
?
?? 測試3: 根據(jù)內(nèi)容信息,輸出多行內(nèi)容(不連續(xù))
?? #將有oldboy和alex行的信息都輸出出來
?? [root@oldboyedu ~]# sed -n'/oldboy/p;/Alex/p'person.txt
??? 101,oldboy,CEO
??? 103,Alex,COO
??? 106,oldboy,CIO
?
??? b sed命令添加信息方法
??? 在文件第一行添加信息:
??? 100,oldgirl,UFO
?? [root@oldboyedu ~]# sed? '1i100,oldgirl,UFO'person.txt
??? 100,oldgirl,UFO
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
??? 104,yy,CFO
??? 105,feixue,CIO
??? 106,oldboy,CIO
?
??? 在文件最后一行添加信息:
?? [root@oldboyedu ~]# sed? '$a108,oldgirl,UFO' person.txt
??? 100,oldgirl,UFO
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
??? 104,yy,CFO
??? 105,feixue,CIO
??? 106,oldboy,CIO
??? 108,oldgirl,UFO
??
?? 測試:
?? 01.在第三行后面添加oldboy.txt信息
?? sed '3aoldboy.txt' person.txt
?? 02.在第二行前面添加oldboy.txt信息
?? sed '2ioldboy.txt' person.txt
?? 03.在有oldboy行的前面添加oldgirl 后面添加olddog信息
?? sed-e'/oldboy/ioldgirl'-e?'/oldboy/aolddog'person.txt
??
?? [root@oldboyedu ~]# sed -e'/oldboy/ioldgirl'-e? '/oldboy/aolddog' person.txt
??? 100,oldgirl,UFO
??? oldgirl
??? 101,oldboy,CEO
??? olddog
??? 102,zhaoyao,CTO
??? 103,Alex,COO
??? 104,yy,CFO
??? 105,feixue,CIO
??? oldgirl
??? 106,oldboy,CIO
??? olddog
??
?? sed?'$a100\n101' person.txt? 添加多行信息
?? 企業(yè)中編寫配置文件:
?? IPaddress=10.10.10.1
?? mask=255.255.255.0
?? gateway=10.10.10.254
sed'$aIPaddress=10.10.10.1\nmask=255.255.255.0\ngateway=10.10.10.254'文件名稱
?
??? c sed命令刪除信息方法
?? 練習(xí):
?? 01.刪除單行信息
?? [root@oldboyedu ~]# #刪除文件中第三行信息
??? [root@oldboyedu ~]# sed '3d'person.txt
??? 100,oldgirl,UFO
??? 101,oldboy,CEO
??? 103,Alex,COO
??? 104,yy,CFO
??? 105,feixue,CIO
??? 106,oldboy,CIO
??
?? 02.刪除多行信息
??? [root@oldboyedu ~]# #刪除文件中第二行到第六行內(nèi)容
??? [root@oldboyedu ~]# sed '2,6d'person.txt
??? 100,oldgirl,UFO
??? 106,oldboy,CIO
??
?? 測試:
?? 01.刪除有oldboy信息的行
?? sed '/oldboy/d' person.txt
??
?? 02.刪除第三行和第六行
?? [root@oldboyedu ~]# #刪除文件中第二行到第六行內(nèi)容
??? [root@oldboyedu ~]# sed '2,6d'person.txt
??? 100,oldgirl,UFO
??? 106,oldboy,CIO
???
??? [root@oldboyedu ~]# sed'3d;6d'person.txt
??? 100,oldgirl,UFO
??? 101,oldboy,CEO
??? 103,Alex,COO
??? 104,yy,CFO
??? 106,oldboy,CIO
??
?? 問題: 如何利用sed命令取消空行顯示
?? [root@oldboyedu ~]# sed -n '/./p' person.txt
??? 100,oldgirl,UFO
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
??? 104,yy,CFO
??? 105,feixue,CIO
??? 106,oldboy,CIO
???
??? [root@oldboyedu ~]# sed '/^$/d' person.txt
??? 100,oldgirl,UFO
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
??? 104,yy,CFO
??? 105,feixue,CIO
??? 106,oldboy,CIO
???
??? [root@oldboyedu ~]# sed -n'/^$/!p' person.txt
??? 100,oldgirl,UFO
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
??? 104,yy,CFO
??? 105,feixue,CIO
??? 106,oldboy,CIO
?
?? d sed命令修改信息方法
??
?? sed 's#原有內(nèi)容#修改后內(nèi)容#g' 文件信息?s /a/b/也行
?? [root@oldboyedu ~]# sed's##oldgirl#old#g' person.txt
??? sed: -e expression #1, char 12:unknown option to `s'
??? [root@oldboyedu ~]# sed 's/#oldgirl/old/g' person.txt
??? 100,old,UFO
???
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
???
??? 104,yy,CFO
??? 105,feixue,CIO
??? 106,oldboy,CIO
?? sed 's#()#\n#g' 文件信息 后項引用前項進行替換修改
??? 利用sed命令取出IP地址信息:
?? 第一個歷程: 取出有IP地址的行
?? [root@oldboyedu ~]#ip a s eth0|sed -n '3p'
??? inet 10.0.0.200/24 brd 10.0.0.255scope global noprefixroute eth0
?? 第二個歷程: 取出IP地址
?? [root@oldboyedu ~]# ip a s eth0|sed-n '3p'|sed -r 's#^.*net (.*)#\1#g'
??? 10.0.0.200/24 brd 10.0.0.255 scopeglobal noprefixroute eth0
??? [root@oldboyedu ~]# ip a seth0|sed -n '3p'|sed -r 's#^.*net (.*)#\1#g'|sed -r 's#(.*)/24.*#\1#g'
??? 10.0.0.200
?
?? sed -r 's#^.*net (.*)#\1#g'|sed -r's#(.*)/24.*#\1#g'? 進行整合
?? ip a s eth0|sed -n '3p'|sed -r's#^.*net (.*)/24.*#\1#g'
??
?? sed -n '3p'|sed -r 's#^.*net(.*)/24.*#\1#g'? 進行整合
??
?? sed -n '3??????????????????????? p'
?? sed -r 's#^.*net (.*)/24.*#\1#g'
?? sed -rn '3s#^.*net(.*)/24.*#\1#gp'?
?? 最終取IP地址方法
?? [root@oldboyedu ~]# ip a s eth0|sed -rn '3s#^.*net
(.*)/24.*#\1#gp'
??? 10.0.0.200
?
??? 補充01: 修改文件內(nèi)容直接進行自動備份?????????? 備份修改前的內(nèi)容
?? [root@oldboyedu ~]# sed -i.bak? 's#oldboy#oldold#g' person.txt
??? [root@oldboyedu ~]# llperson.txt.bak
??? -rw-r--r--. 1 root root 104 Oct10 11:40 person.txt.bak
??? [root@oldboyedu ~]# catperson.txt.bak
??? 100,#oldgirl,UFO
???
??? 101,oldboy,CEO
??? 102,zhaoyao,CTO
??? 103,Alex,COO
???
??? 104,yy,CFO
??? 105,feixue,CIO
??? 106,oldboy,CIO
?
??? 補充02: 在真實替換文件內(nèi)容時候,一定不能讓n和i參數(shù)同時出現(xiàn)
??? [root@oldboyedu ~]# sed -ni's#Alex#aaaa#gp' person.txt
??? 103,aaaa,COO
?? [root@oldboyedu ~]# cat person.txt
??? 103,aaaa,COO
?? 說明: ni和參數(shù)同時使用,會將文件內(nèi)容進行清空
?
?? 測驗替換功能:
?? 創(chuàng)建測試環(huán)境:
?? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy01.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy02.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy03.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy04.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy05.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy06.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy07.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy08.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy09.txt
??? -rw-r--r--. 1 root root????? 0 Oct 10 02:10 oldboy10.txt
?? 批量修改文件的擴展名稱 將oldboyxx.txt擴展名修改為oldboyxx.jpg
??
?? [root@oldboyedu oldboy]# lsoldboy*.txt|sed -r 's#(.*)txt#mv&\1jpg#g'
??? mv oldboy01.txt oldboy01.jpg
??? mv oldboy02.txt oldboy02.jpg
??? mv oldboy03.txt oldboy03.jpg
??? mv oldboy04.txt oldboy04.jpg
??? mv oldboy05.txt oldboy05.jpg
??? mv oldboy06.txt oldboy06.jpg
??? mv oldboy07.txt oldboy07.jpg
??? mv oldboy08.txt oldboy08.jpg
??? mv oldboy09.txt oldboy09.jpg
??? mv oldboy10.txt oldboy10.jpg
??? mv oldboy.txt oldboy.jpg
??? [root@oldboyedu oldboy]# lsoldboy*.txt|sed -r 's#(.*)txt#mv & \1jpg#g'|bash
??
?? 批量重命名專業(yè)命令: rename
??? rename? .txt???????.jpg????????? ?oldboy*.txt
?? 命令??? 文件名稱需要修改的部分信息??? 修改成什么信息????? 將什么樣的文件進行修改
?? [root@oldboyedu ~]# cat person.txt|sed-i 's#COO#CEO#g'
??? sed: no input files
??? [root@oldboyedu ~]# sed -i's#COO#CEO#g' person.txt
?? 文件中添加內(nèi)容方法:
?? 01.vim/vi
?? 02.cat >xxx<
?? 03.echo -e "xxx\nxxx" ???????????????添加多行信息//n表示換行
?? 04.sed 'na/i xxxx\nxxxx\nsxxxx'???? 添加多行信息/n表示換號
?? 總結(jié): sed命令的指令信息
?? p? print???????輸出信息
?? i? insert??????插入信息,在指定信息前面插入新的信息
?? a? append??????附加信息,在指定信息后面附加新的信息
?? d? delete??????刪除指定信息
?? s? substitute??替換信息 s###g(全局替換)
?? c?????????????? 替換修改指定的一整行信息
?? [root@oldboyedu ~]# sed'2coldboyedu-sz-01' person.txt
??? 103,aaaa,CEO
??? oldboyedu-sz-01
?
??? 總結(jié): sed命令的參數(shù)信息
???-n? 取消默認輸出
???-r? 識別擴展正則
???-i? 真實編輯文件(將內(nèi)存中的信息覆蓋到磁盤中)? 不能-in一起使用
?? -e? 識別sed命令多個操作指令