string editor 流編輯器
sed編輯器是一行一行的處理內容,正在處理的內容存放在緩沖區內,處理完后
按照選項的規定進行輸出或者修改文件
option: | |
-n | 靜默模式結合p可以只輸出修改行,讀取指定行數 |
-e | 多操作指令 |
-f | 運行腳本 |
-i | 修改文件 |
-i.bak | 修改同時備份.bak文件 |
-r | 使用擴展正則 |
command: | |
a | 追加 |
i | 插入 |
p | 打印 |
d | 刪除 |
r/R | 讀取文件/一行 |
w | 存檔 |
s | 查找 |
c | 替換 |
y | 替換 |
h/H | 復制拷貝/追加緩沖區到存放空間 |
g/G | 粘貼 從存放空間取回/追加到模式空間 |
x | 兩個空間內容交換 |
n/N | 拷貝/追加下一行內容到當前 |
D | 刪除\n之前的內容 |
P | 打印\n之前的內容 |
b | 無條件跳轉 |
t | 滿足匹配后的跳轉 |
T | 不滿足匹配時的跳轉 |
常用用法:
sed 's/root/rooot/g' /etc/passwd #將root替換成rooot,並標准輸出 sed 's/root/rooot/g' /etc/passwd > /etc/passwd #將替換結果作為文件修改(謹慎使用,注意備份) sed -i 's/root/rooot/g' /etc/passwd #將替換結果作為文件修改
輸出第三行
sed -n '3p' /etc/passwd
-n抑制輸出,如果不加上p打印的話,修改行是不會輸出顯示出來的
輸出前三行
sed -n '1,3p' /etc/passwd
head -3 /etc/passwd
輸出第一行和第三行
nl /etc/passwd | sed -n -e "1p" -e "3p"
輸出前三行之外的行
sed -n '1,3!p'
注意使用單引號,防止!p轉義
輸出第三行及其之后的三行
nl passwd | sed -n '3,+3p'
將文本每行最后七個字符換成!號
sed -n 's#.\{7\}$#!#p' ooo
在文本的每一行前添加#符號,此時不要開啟靜默模式-n
sed 's/^.\?/#&/' passwd
& 替代符 替代前面所匹配的
? 數量符 需要轉義 表示1個或0個
/ 分隔符 此處三個都是 可以用別的符號代替,避免沖突,下面是一個斜線沖突避免的例子
sed 's_/bin/bash_/sbin/nologin_' /etc/passwd
將某個目錄下所有文件文本中的kkkkk 換成 ddddd
sed -i 's/kkkkk/ddddd/g' `grep kkkkk -rl mydir`
grep 中 -r遞歸幾層
截取文本中的某一段(IP地址)並存放與文件中
cat eth0 | sed 's/.*t addr://' | sed 's/ Bc.*//' |xargs echo > ech0 sed -i -e 's/.*t addr://' -e sed 's/B.*//' eth0
.* 表示任意字母任意數量
-e 表示多點編輯
-i 表示修改文件
刪除第6行到最后一行
sed '6,$d' file
刪除第1行 和 第3行
sed -e '1d' -e '3d' file
第3行上面插入兩行
sed '3i hello world \ >the text' file
第4行下追加一行
sed "4a Hello world" passwd
替換行
sed '3c33333333' file #替換第三行
保存apache配置文件中的非注釋行
sed -n '/^[^#]/w apache.conf' /etc/apache2/apache2.conf
對字符操作
把file中的包含root的行刪除
sed '/root/d' file
顯示包含某些字符的行
sed -n '/root/n' file
檢索行並於此執行命令 命令間分好隔開
sed -n '/root/{s/bash/bullet;p;q}' file #將含有root的行上把bash改成bullet並輸出
s替換 p打印 q退出
Grep的正則匹配
匹配空行
grep -n ^$ file
匹配非空行
grep -n -v ^$ file
匹配單引號
grep \' /etc/services --color grep "'" /etc/services --color
模糊匹配,星號表示前一個字母零個或多個
grep -n spo* /etc/passwd --color
匹配ga或者ge
grep g[ae] /etc/passwd --color
匹配非注釋行
grep -v \# /etc/apache2/apache2.conf grep ^[^#] /etc/apache2/apache2.conf --color
注意上面兩個語句都可以匹配非注釋行,但第一個語句繪保留空行,第二個不會
字符數量匹配
grep -n "o\{2,3\}" /etc/passwd
注意轉義需要引號
單詞精確匹配
grep "\<spool\>" /etc/passwd --color
最后的小插曲
cat -n 與 nl 的區別,實踐出真知!