個人網(wǎng)站 創(chuàng)意網(wǎng)站代運營推廣
sed簡介
????????sed是一種流編輯器,處理時,把當前處理的行存儲在臨時緩沖區(qū)中,稱為模式空間,接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下行,這樣不斷重復,直到文件末尾。文件內(nèi)容并沒有改變。
sed的語法
基本語法:# sed ?參數(shù) ?測試文件
常用參數(shù)詳解
# cat passwd -n > testfile ????????????????【配置測試文件】
????????-n : ?--quiet,--silent: 不輸出模式空間中的內(nèi)容,使用安靜模式,在一般sed的用法中,所有來自STDIN的數(shù)據(jù)一般都會被列出到屏幕上,但如果加上-n參數(shù)后,則只有經(jīng)過sed特殊處理的那行才會被列出來;
????????-i : ?直接編輯原文件,而不是由屏幕輸出,默認不對原文件進行操作;
????????-e : ?直接在命令行模式上進行sed的動作編輯,多個子命令之間也可以用分號隔開;
????????-r : ?使用擴展正則表達式;
????????-f : ?直接將sed的動作寫在一個文件內(nèi),-f rule則可以執(zhí)行rule內(nèi)的sed動作。
# vim rule
模式空間中的編輯操作
地址定界
# sed -n?(行/參數(shù))s / 匹配內(nèi)容 / 替換內(nèi)容 /g ?測試文件
# cat passwd ?????????????????????【查看測試文件】
# sed '1,3s/:/bin/g' passwd????????????【1-3行,將 :?為目標替換為bin】
# sed -e '2,+2s/bin/:/g' passwd????????【替換2行以及后2行】
# sed -e '2~2s/:/_@_/g' passwd???????????【第2行開始,間隔1行替換】
# sed -e '/daemon/,/sys/s/:/@/g' passwd ??????【對daemon開頭到sys開頭的行替換字符】
# sed '1,/^sys/s/:/##/g' passwd ??????????????【從第1行到sys的行】
常用編輯命令
顯示刪除行/d
顯示指定行/p
添加行a
插入行i
整行替換
整合文件
字符替換
練習:根據(jù)用戶參數(shù)和用戶密碼參數(shù),設置創(chuàng)建用戶腳本
# vim cj.sh ?????????【創(chuàng)建腳本】
#!/bin/bash
li=`wc -l user.sh | cut -d " " -f 1` ???【wc -l 統(tǒng)計行數(shù),cut -d " " -f 1 以空格為分隔符取第一列】
# 創(chuàng)建用戶
for i in `seq 1 $li`
do
????#讀取腳本
????username=`sed -n "${i}p" $1` ??????【讀取第一個參數(shù),用戶名腳本】
????password=`sed -n "${i}p" $2` ??????【讀取第二個參數(shù),密碼腳本】
????# 檢查用戶是否已存在
????if id "$username" &>/dev/null;
????then
????????echo "用戶 '$username' 已存在"
????#不存在創(chuàng)建
????else
????????useradd ?"$username"
????????echo $passwd | passwd --stdin $username &> /dev/null
????fi
done
用戶已創(chuàng)建運行結果:
運行結果:
特殊字符
# sed '2,+1s/:/##/g' testfile ??????????【替換第2行以及后1行】