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