字符串的初值 正则表达式 sed应用
目錄
字符串的初值(備用值)
正則表達(dá)式
基礎(chǔ)正則列表?
擴(kuò)展正則列表
基本正則:?
?擴(kuò)展正則egrep:
基本元字符
{}限定次數(shù)?
其他元字符
整體及邊界匹配
sed基本用法
sed命令
命令格式
常見的命令選項(xiàng)
常用動(dòng)作指令
?輸出文本
刪除文本
替換文本
如何把/bin/bash換成/sbin/sh?
sed替換應(yīng)用
編寫腳本,搭建ftp服務(wù),并且實(shí)現(xiàn)匿名上傳功能
sed的文本塊處理動(dòng)作
a行后追加練習(xí)
i行前追加練習(xí)
c替換練習(xí)
sed高級(jí)應(yīng)用
導(dǎo)入導(dǎo)出操作
!取反操作
sed綜合腳本應(yīng)用
字符串的初值(備用值)
- 使用${}表達(dá)式,格式: ?${變量名:-(備用值)} ? ? ?變量為非空值時(shí)不能使用
正則表達(dá)式
可以配合某工具對(duì)文檔進(jìn)行過濾篩選
-
基礎(chǔ)正則列表?
| 正則符號(hào) | 描述 |
| ^ | 匹配行首 |
| $ | 匹配行尾 |
| [ ] | 集合,匹配集合中任意單個(gè)字符 |
| [ ^ ] | 對(duì)集合進(jìn)行取反 |
| . | 匹配任意單個(gè)字符 |
| * | 匹配前一個(gè)字符任意次數(shù) ? ? (*不允許單獨(dú)使用) |
| \{n,m\} | 匹配前一個(gè)字符n到m次 |
| \{n\} | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 匹配前一個(gè)字符n次 |
| \{n,\} | 匹配前一個(gè)字符n次及以上 |
| \( \ ) | 保留,組合成一個(gè)整體 |
-
擴(kuò)展正則列表
| 正則符號(hào) | 描述 |
| + | 最少匹配一次 |
| ? | 最多匹配行首 |
| {n,m} | 匹配n到m次 |
| ( )? | 組合為整體,保留,相當(dāng)于復(fù)制 |
| | | 或者 |
| \b | 單詞邊界 |
?
準(zhǔn)備素材:?
[root@server0 ~]# head -5 /etc/passwd > user [root@server0 ~]# cat user root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin基本正則:?
[root@server0 ~]# head -5 /etc/passwd > /mnt/test ? ##以test為素材 [root@server0 ~]# cat test root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# grep root test ? ##查找有root的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep ^root test ? ##查找以root開頭的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep bash$ test ? ##查找以bash結(jié)尾的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep "[ro]" test ? ##查找字母r或者o的行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# grep "[a-z]" test ? ##查找所有小寫字母
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@server0 ~]# grep "[A-Z]" test ? ?##查找所有大寫字母 素材內(nèi)無大寫所以無匹配.
[root@server0 ~]# grep "[0-9]" test ? ?##查找所有數(shù)字
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@server0 ~]# grep "[a-Z]" test ? ? ?##查找所有字母
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@server0 ~]# grep "[^ro]" test ? ? ##查找r或者o之外的內(nèi)容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@server0 ~]# grep "[^0-9]" test ? ? ?##查找數(shù)字之外的內(nèi)容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin?
?擴(kuò)展正則egrep:
- 文本處理順序:
- 基本用法: ? 等同于grep ?-E ,表示允許使用擴(kuò)展的正則表達(dá)式
| 常用選項(xiàng) | 作用 |
| -i | 忽略字母大小寫 |
| -v | 條件取反 |
| -c | 統(tǒng)計(jì)匹配的行數(shù) |
| -q | 靜默,無任何輸出,一般用于檢測 |
| -n | 顯示出匹配結(jié)果所在的行號(hào) |
| --color | 標(biāo)紅顯示匹配字串 |
基本元字符
| 類型? | 含義 | 示例 | 說明 |
| ^? ? | 匹配行首 | ^abc | 以abc開頭的行 |
| ^# ? | 以#開頭的行(比如注釋行) | ||
| $ ? | 匹配行尾 | abc$ | 以abc結(jié)尾的行 |
| ^$ | 空行 | ||
| . | 單個(gè)字符 | . ? | 除換行符(\n)以外的任意單個(gè)字符 |
| +? ? | 最少匹配一次 | a+ ? | 一個(gè)或多個(gè)連續(xù)的a |
| ? ? (abc)+ ? ? ? ? ?? | 一個(gè)或多個(gè)連續(xù)的abc | ||
| ?? ? ? ? ? | 最多匹配一次 ? | ?a? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0個(gè)或1個(gè)a |
| (abc)? | 0個(gè)或1個(gè)abc | ||
| * | 匹配任意次數(shù) | a* | ?0個(gè)或多個(gè)連續(xù)的a |
| (abc)*? | 0個(gè)或多個(gè)連續(xù)的abc | ||
| * ? | 任意長度的任意字符串 |
{}限定次數(shù)?
| 類型 | 含義 | 示例 | 說明 |
| {n} | 匹配n次 | (ab){3} | 匹配ababab |
| {n,m} | 匹配n-m次 | (ab){1,3} | 匹配ab,abab,ababab |
| {n,} | 匹配至少n次 | (ab){2,} | 匹配2個(gè)及以上連續(xù)的ab |
其他元字符
| 示例 | ?說明 |
| [alc45_?] | 匹配a,l,c,4,5,_,? |
| [a-z] | 匹配任意小寫字母 |
| [A-Z] | 匹配任意大寫字母 |
| [0-9] | 匹配任意數(shù)字 |
| [a-Z0-9] | 匹配任意字母或數(shù)字 |
| [^A-Z] | 匹配包括非大寫字母的行 |
| ^[^a-z] | 匹配不以小寫字母開頭的行 |
整體及邊界匹配
| 類型 | 含義 | 示例 | 說明 |
| () | 組合為整體 | ab{1,3} | 匹配ab,abb,abbb |
| (ab){1,3} | 匹配ab,abab,ababab | ||
| | | 或者 | root|bin | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?匹配root|bin |
| \b | 單詞邊界 | \broot\b | 匹配單詞root,不匹配keroot,rooty等字符串 |
| \< | 單詞的開頭 | \<th | 匹配以th開頭的單詞 |
| \> | 單詞的結(jié)束 | \<root\> | 作用與\broot\b相同 |
| \w | 字母數(shù)字下劃線 | \wa | 匹配xa,不匹配#a |
| \s | 匹配空白 | \sa | 匹配 ?a,不匹配xa |
| \d | 匹配數(shù)字 | -P \da | 匹配n(數(shù)字)a,不匹配xa |
sed基本用法
sed命令
sed,流式編輯器
- 非交互,基于模式匹配過濾文件及修改文本
- 逐行處理,并將結(jié)果輸出到屏幕
- 可實(shí)現(xiàn)對(duì)文本的輸出,刪除,替換,復(fù)制,剪切,導(dǎo)入,導(dǎo)出等各種操作
命令格式
- 格式一:前置命令 ? | ?sed ?選項(xiàng) ? (定址符)指令
- 格式二: sed ? ? 選項(xiàng) ? ?(定址符)指令 ? ?被處理的文件
常見的命令選項(xiàng)
| -n | 屏蔽默認(rèn)輸出(全部文本) |
| -i | 直接修改文件內(nèi)容,對(duì)文件進(jìn)行實(shí)際操作 |
| -r | 啟用擴(kuò)展的正則表達(dá)式,若與其他選項(xiàng)一起使用,應(yīng)作為首個(gè)選項(xiàng) |
| -e | 指定需要執(zhí)行的-e指令,支持使用多個(gè)-e參數(shù) |
| -f | 指定需要執(zhí)行的腳本文件,需要提前將sed指令寫入文件中 |
條件,可以使行號(hào)或/正則/
行號(hào)可以使用單個(gè)數(shù)字表示單行
或者n,m表示連續(xù)的多行
省略條件,正則默認(rèn)逐行處理全部文本
匹配正則時(shí),則需要使用//
常用動(dòng)作指令
替換操作的分隔"/"可改用其他字符,如#.&等,便于修改文件路徑
| 操作符 | 用途 | 指令示例 |
| p | 打印行 | 2,4p ? ?輸出2 3 4 行 |
| 2p;4p ? 輸出第2 ?4 行 | ||
| d | 刪除行 | 2,4d ? ? 刪除第2 3 4 行 |
| s | 字符串替換 | s/old/new/ ? 將每行的第一個(gè)old替換為new |
| s/old/new/3 ? 將每行的第三個(gè)old替換為new | ||
| s/old/new/g ? ?將所有的old都替換為new |
?輸出文本
[root@server0 ~]# cat test ##以test文件作為素材 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed 'p' test ##輸出+默認(rèn)輸出,所以是每行出現(xiàn)2次 root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed -n 'p' test ## 輸出全文 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed -n '1p' test ##輸出第一行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# sed -n '2p' test ##輸出第二行 bin:x:1:1:bin:/bin:/sbin/nologin [root@server0 ~]# sed -n '3p' test ##輸出第三行 daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '1,3p' test ##輸出1-3行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '1p;3p' test ##輸出第1行和第3行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '1,+2p' test ##輸出第1行以及后面2行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '3,+1p' test ##輸出第3行以及后面1行 daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed -n '1~2p' test ##輸出奇數(shù)行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed -n '2~2p' test ##輸出偶數(shù)行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed -n '/root/p' test ##輸出有root的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# sed -n '/^root/p' test ##輸出以root開頭的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# free | sed -n '2p' ##輸出free指令生成的文檔的第2行 Mem: 1446924 70232 1108292 8608 268400 1211636 [root@server0 ~]# sed -rn '/root|bin/p' test ##輸出有root或者有bin的行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed -n '$=' test ##統(tǒng)計(jì)輸出全文最后1行行號(hào) 5刪除文本
[root@server0 ~]# sed 'd' test ##刪除全文 [root@server0 ~]# sed '1d' test ##刪除第1行,顯示剩余行 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '2d' test ##刪除第2行, root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '5d' test ##刪除第5行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed '1,3d' test ##刪除1-3行 adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '3,+2d' test ##刪除第3行以及后面2行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@server0 ~]# sed '/bash$/d' test ##刪除以bash結(jié)尾的行 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '1d;3d' test ##刪除第1行和第3行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '1~2d' test ##刪除奇數(shù)行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed '2~2d' test ##刪除偶數(shù)行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '$d' test ##刪除全文最后1行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed '/var/!d' test ##不刪除有var的行 adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin替換文本
[root@server0 ~]# vim hihi ##以hihi作為素材 2017 2011 2018 2017 2017 2024 2017 2017 2017 [root@server0 ~]# sed 's/2017/xxxx/' hihi ##將所有行的第1個(gè)2017替換成xxxx xxxx 2011 2018 xxxx 2017 2024 xxxx 2017 2017 [root@server0 ~]# sed 's/2017/xxxx/2' hihi ##將全文的第2列的2017替換成xxxx 2017 2011 2018 2017 xxxx 2024 2017 xxxx 2017 [root@server0 ~]# sed 's/2017/xxxx/g' hihi ##將全文的2017替換成xxxx xxxx 2011 2018 xxxx xxxx 2024 xxxx xxxx xxxx [root@server0 ~]# sed '2s/2017/xxxx/' hihi ##將第2行的第1個(gè)2017替換成xxxx 2017 2011 2018 xxxx 2017 2024 2017 2017 2017 [root@server0 ~]# sed '3s/2017/xxxx/2' hihi ##將第3行的第2個(gè)2017替換成xxxx 2017 2011 2018 2017 2017 2024 2017 xxxx 2017 [root@server0 ~]# sed '3s/2017//2' hihi ##潛在的刪除功能,將第3行的第2個(gè)2017替換成空 2017 2011 2018 2017 2017 2024 2017 2017 [root@server0 ~]# sed 's/2024/xxxx/p' hihi ##將所有行的2024替換成xxxx 2017 2011 2018 2017 2017 xxxx 2017 2017 xxxx 2017 2017 2017如何把/bin/bash換成/sbin/sh?
[root@server0 ~]# cat test ?##以test作為素材
root:x:0:0:root:/root:/bin/bash
[root@server0 ~]# sed ?'s/\/bin\/bash/\/sbin\/sh/' ? test ?##正常替換,繁瑣
root:x:0:0:root:/root:/sbin/sh
[root@server0 ~]# sed ? 's#/bin/bash#/sbin/sh#' ? ?test ? ##修改替換符,簡潔
root:x:0:0:root:/root:/sbin/sh?
sed替換應(yīng)用
創(chuàng)建素材文件:nssw.txt
[root@server0 ~]# vim nssw.txt Hello the world ni ha4o ma beijing刪除文件中每行的第二個(gè),最后一個(gè)字符
[root@server0 ~]# sed 's/.//2;s/.$//' nssw.txt? hllo the world n hao ma beijin將文件中每行的第一個(gè),倒數(shù)第一個(gè)字符互換
[root@server0 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt dello the worlh gi hao ma beijinn刪除文件中的數(shù)字
[root@server0 ~]# sed -i 's/[0-9]//g' nssw.txt hello the world ni hao ma beijing為文件中每個(gè)大寫字母添加括號(hào)
[root@server0 ~]# sed -r 's/([A-Z])/{\1}/g' nssw.txt {H}ello t{H}e world ni hao {M}a bei{J}ing [root@server0 ~]# sed -r 's/([A-Z])/[\1]/g' nssw.txt [H]ello t[H]e world ni hao [M]a bei[J]ing [root@server0 ~]# sed -r 's/([A-Z])/(\1)/g' nssw.txt (H)ello t(H)e world ni hao (M)a bei(J)ing編寫腳本,搭建ftp服務(wù),并且實(shí)現(xiàn)匿名上傳功能
測試:在真機(jī)上連接ftp://172.25.0.11進(jìn)入pub目錄,注意selinux和防火墻的影響!!!!!!!!!!!!!!!!!!!!!!!
[root@server0~]# vim test03.sh #!/bin/bash #這是一個(gè)簡單的ftp服務(wù) if [ "$USER" != "root" ];then echo "你不是管理員,沒有權(quán)限哦!" exit 2 fi rpm -q vsftpd if [ $? -ne 0 ];then yum -y install vsftpd &> /dev/null sed -i '/^#anon_upl/s/#//' /etc/vsftpd/vsftpd.conf systemctl restart vsftpd systemctl enable vsftpd &> /dev/null chmod 777 /var/ftp/pub #setenforce 0 ##安裝有防火墻就需要這2行 #systemctl stop firewalld else echo "請(qǐng)稍等..." sed -i '/^#anon_upl/s/#//' /etc/vsftpd/vsftpd.conf systemctl restart vsftpd systemctl enable vsftpd &> /dev/null chmod 777 /var/ftp/pub #setenforce 0 ##安裝有防火墻就需要這2行 #systemctl stop firewalld fised的文本塊處理動(dòng)作
| 操作符 | 用途 | 指令示例 |
| i ? | 行前插入文本 | 2iYY ? ? 在第二行之前添加文本行"YY" |
| 4,7iYY ? 在第4-7行的每一行前添加文本行 | ||
| a ? | 行后插入文本 | 2aYY ? ? ?在第二行之后添加文本 |
| /^XX/aYY ? 在以XX開頭的行之后添加文本 | ||
| c | 替換當(dāng)前行 | 2cYY ? ? ?將第二行的內(nèi)容修改為"YY" |
處理多行文本:修改后的文本有多行時(shí)
- 以換行符 \n 分隔
- 或者,使用 \ 強(qiáng)制換行?
a行后追加練習(xí)
[root@server0 ~]# cat user #準(zhǔn)備素材 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# sed '1a XXXX' user #第一行下追加字母 root:x:0:0:root:/root:/bin/bash XXXX bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# sed '1,3a XXXX' user #第1-3行下都追加字母 root:x:0:0:root:/root:/bin/bash XXXX bin:x:1:1:bin:/bin:/sbin/nologin XXXX daemon:x:2:2:daemon:/sbin:/sbin/nologin XXXX adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# sed '1,+1a XXXX' user #第一行以及后面的一行追加字母 root:x:0:0:root:/root:/bin/bash XXXX bin:x:1:1:bin:/bin:/sbin/nologin XXXX daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# sed '/root/a XXXX' user #有root的行下追加 root:x:0:0:root:/root:/bin/bash XXXX bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologini行前追加練習(xí)
[root@server0~]# sed 'i 666' test ##所有行前添加一行666 666 root:x:0:0:root:/root:/bin/bash 666 bin:x:1:1:bin:/bin:/sbin/nologin 666 daemon:x:2:2:daemon:/sbin:/sbin/nologin 666 adm:x:3:4:adm:/var/adm:/sbin/nologin 666 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0~]# sed '2,+1i 666' test ##第2~3行前添加一行666 root:x:0:0:root:/root:/bin/bash 666 bin:x:1:1:bin:/bin:/sbin/nologin 666 daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0~]# sed '/root/i 666' test ##有root的行前添加一行666 666 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0~]# sed '/^root/i 666' test ##以root開頭的行添加一行666 666 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0~]# sed '2i 666' test ##第2行前添加一行666 root:x:0:0:root:/root:/bin/bash 666 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologinc替換練習(xí)
[root@server0 ~]# sed 'c XXXX' user #將所有行替換為XXXX XXXX XXXX XXXX XXXX XXXX[root@server0 ~]# sed '1c XXXX' user #將第一行替換成XXXX XXXX bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# sed '1,2c XXXX' user #將第一二行替換成XXXX XXXX daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# sed '/root/c XXXX' user #將以root開頭的行替換成XXXX XXXX bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsed高級(jí)應(yīng)用
導(dǎo)入導(dǎo)出操作
- r 動(dòng)作應(yīng)結(jié)合 -i 選項(xiàng)才會(huì)存入,否則只輸出
- w 動(dòng)作以覆蓋的方式另存為新文件
| 操作符 ? | 用途 | 指令示例 |
| r | 讀取文件 | 3r b.txt 在第3行下方添加文件b.txt |
| 4,7r b.txt?在第4-7行后添加文件b.txt | ||
| w | 保存到文件 | 3w c.txt 將第3行另存為文件c.txt |
| 4,7w c.txt 將第4-7行另存為文件c.txt |
!取反操作
用途:
- 根據(jù)定址條件取反
示例
- 列出不使用bash的用戶賬號(hào)記錄
sed綜合腳本應(yīng)用
編寫一個(gè)腳本
要求編寫腳本getupwd.sh,實(shí)現(xiàn)以下需求:
- 找到使用bash作登錄Shell的本地用戶
- 列出這些用戶的shadow密碼記錄
- 按每行“用戶名 --> 密碼記錄”保存到getupwd.log,如圖-1所示
方案:
?
總結(jié)
以上是生活随笔為你收集整理的字符串的初值 正则表达式 sed应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: case分支 shell函数
- 下一篇: LNMP动态网站