shell指令碼程式設計 sed 03

2021-10-04 03:01:22 字數 4111 閱讀 7830

-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...