-shell指令碼程式設計-sed-03
指令:
p: 輸出
d: 刪除
1.刪除檔案最後一行
#sed '/$/d' test.txt
2.刪除檔案的空行:
#sed '/^$/d' test.txt
s = 替換
語法結構:
1. sed 's/old/new/' test.txt
//替換第乙個匹配到的old
2. sed 's/old/new/g' test.txt
//替換所有匹配到的old
3. sed 's/old/new/2' test.txt
//替換每行匹配到的第2個
替換實現刪除的效果:
1. sed 's/old/2' test.txt
//刪除匹配到每行的第二個
2.sed -n 's/old/new/p' test.txt
//列印替換之後的結果
案例演示: s指令
1.將test. txt 中每行第三個xml替換為xml
# sed 』 s/ xml/xm1/3 』 test. txt
2.將test . txt 中每行的xm1刪除
3.將每行的/bin/bash替換為/bin
//s替換中的條件/是乙個分隔符,分隔符可以替換為#、$、%等,
為了便於檔案修改
4.將第4~7行加上注釋 (每行開頭加上#號)
5.將以#an開頭的注釋去掉 (去掉每行開頭的#號)
6.刪除檔案中每行的第二個字元,最後乙個字元(兩次操作,需要分號;隔開)
#sed 『s/.//2;s/.$//』 test.txt
7.將檔案中每行的第乙個和最後乙個字元進行互換:
#sed 『s/^(.)(.*)(.)$/\3\2\1/』 test.txt
//-r選項是用來支援擴充套件正則的
8.刪除檔案中所有數字:
#sed 『s/[0-9]//』 test. txt
9.刪除行首的空格:
10.為檔案中每個大寫字母新增括號:
#sed -r 『s/[a-z]/』[\1]/g』
例項:
編寫乙個ftp.sh指令碼,用來配置匿名ftp服務:
指令碼實現功能:
1.通過yum安裝vsftpd軟體包
2。修改vsftpd服務配置,開啟匿名上傳
3.調整/var/ftp/pub/目錄許可權,允許ftp寫入
4.啟動vsftpd服務,設定為開機自啟
1[root@cml ~]# vim ftp.sh
2#!/bin/bash
3 yum -y install vsftpd
//安裝軟體包
4 cp -p /etc/vsftpd/vsftpd.conf/etc/vsftpd/vsftpd.conf.old
//進行拷貝防止原始檔修改錯誤
5 sed -i 『s/^#anon_u/anon-u/』 /etc/vsftpd/vsftpd.conf
//使用sed指令進行替換
6 chmod 777 /var/ftp/pub
//修改許可權
7 systemctl restart vsftpd
//重起服務
8 systemctl enable vsftpd
//開機自起
9firewall-cmd --set default -zone=trusted
//修改防火牆為允許任何訪問
10setenforce 0
//修改selinux為寬鬆模式
sed多文字處理:
完成以下操作:
修改主機配置檔案
修改hosts檔案,新增兩條對映記錄
192.168.1.2 www.aaa.com
192.168.1.3 www.bbb.com
多文字處理操作:
i:在指定的行之前插入文字
a: 在指定的行之後插入文字
c: 替換指定的行
ftp服務安裝及配置:
包名:vsftpd
配置檔案: /etc/vsftpd/vsftpd.conf
埠:20 21
黑名單檔案:/etc/vsftpd/ftppusers
白名單檔案:/etc/vsftpd/user_list
匿名傳輸:
#anonymous enable=ye s
允許本地使用者登入:
#local_enable=yes
共享目錄: /var/ftp/pub
#!/bin/bash
yum -y install vsftpd
//安裝vsftpd軟體
cp /etc/vsftpd/vsftpd.conf
//備份預設配置檔案
sed -i 『s/^#//』 /etc/vsftpd/vsftpd.conf
//修改配置檔案
chown ftp /var/ftp/pub
//調整目錄許可權
systemctl restart vsftpd
systemctl enbale vsftpd
sed 多文字處理:
完成以下操作:
修改主機配置檔案
修改hosts檔案,新增兩條對映記錄
192.168.1.2 www.bbb.com
多文字處理操作:
i:在指定的行之前插入文字
a:在指定之後插入文字
c:替換指定的行
語法結構:
#sed 『2a xx』 a.txt //在第二行後追加xx
#sed 『2i xx』 a.txt //在第二行前面插入xx
#sed 『2c xx』 a.txt //將第二行替換為xx
修改主機配置檔案:
修改hosts檔案,新增兩條對映記錄
192.168.1.2 www.aaa.com
192.168.1.3 www.bbb.com
#sed 『$a 192.168.1.2 www.aaa.com』 /etc/hosts
修改hosts檔案,新增兩條對映記錄
192.168.1.2 www.aaa.com
192.168.1.3 www.bbb.com
#sed 『$a 192.168.12 www.aaa.com』 /etc/hosts
總結:#sed 選項 『條件指令』 檔案
選項:-n :遮蔽預設輸出
-r :支援擴充套件正則
-i :修改原始檔
條件:行號:4 4,5 4~2 4+10
/正則/
指令:
p :列印
d :刪除
s :替換 s/舊/新/g
a :追加
i :插入
c :替換行
例項:編寫乙個getupwd,實現以下需求:
1.找到使用bash作為登入shell的本地使用者
2.列出這些使用者的shadow密碼記錄
3.按照每行「使用者名稱----> 密碼記錄」 格式儲存到getupwd.log
root --> $1 mqx
hhaw
ymqxhhawy
mqxhha
wyyonhc 2aqw66xkrzjn. syr/
實現思路:
1.先從/etc/ passwd中取出以bash結尾的行的使用者名稱
2.結合迴圈遍歷取出來的使用者名稱,對/etc/shadow進行處理
3.採用掐頭去尾方式,獲得密碼字串
4.按照指定格式進行追加
#!/bin/bash
username=sed '/bash$/s' /etc/passwd
for i in $username
dopassl=grep $i /etcadow
pass2=pas
s1pa
ss3=
pass3=
pass1p
ass3
=echo 「$i --> $pass3」 >> getupws.log
done
shell指令碼程式設計之sed
sed 選項 指令 動作 檔案 n 使用安靜 silent 模式。在一般 sed 的用法中,所有來自 stdin 的資料一般都會被列出到終端上。但如果加上 n 引數後,則只有經過sed 特殊處理的那一行 或者動作 才會被列出來。f 直接將 sed 的動作寫在乙個檔案內,f filename 則可以執...
Shell指令碼 程式設計高階03
1 每隔 3 秒鐘到系統上獲取已經登入的使用者的資訊 如果發現使用者 hacker 登入,則將登入時間和主機記錄於日誌 var log login.log 中,並退出指令碼 bin bash while do echo date f t no information if who grep hack...
shell指令碼學習sed
i 替換並儲存 s pattern replace string 只替換第一處 s pattern replace string g 替換所有 s pattern replace string ng 從第n處開始匹配 ex 直接替換文字 clz localhost shell learn sed i...