詳細的sed命令詳解,請參考https://my.oschina.net/u/3908182/blog/1921761
sed命令常見用途
- 查找關鍵詞做全局替換
- 查找某行的關鍵詞做替換
- 查找關鍵字所在行,並且執行指定關鍵字的替換
- 在某行之后追加
- 查找關鍵字,並且在第二行追加
- 刪除包含關鍵字的行
- 查看指定的行
- 在最后一行追加
- sed -e 參數,屏幕輸出,一次更改多替換文本中多個值
1. 查找關鍵詞做全局替換
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
2. 查找/etc/crontab 第17行,並且把0,30替換為15,45
sed -i '17s/0,30/15,45/' /etc/crontab
3. 查找/etc/crontab 中的關鍵字script.sh,並且把15,45替換為0,30
sed -i '/script.sh/s/15,45/0,30/' /etc/crontab
4. 在第17行后添加新的 一行內容
sed -i '17a\0 * * * * root /root/test.sh' /etc/crontab
5. 在/etc/crontab中查找關鍵字script,並且該關鍵字的下一行追加一行新內容
sed -i '/^.*script.*$/a\30,45 * * * * root /root/check.sh' /etc/crontab
6. 在/etc/crontab中查找關鍵字check.sh,並且刪除該行
sed -i '/check.sh/d' /etc/crontab
7. 顯示第17到18行之間的內容
sed -n '17,18p' /etc/crontab
8. 在最后一行追加一行0 * * * * root /root/check.sh
sed -i '$a\0 * * * * root /root/check.sh' /etc/crontab
9. sed 命令處理換行符,例如替換或者刪除
sed ':label;N;s/\n/:/;b label' filename sed ':label;N;s/\n/:/;t label' filename
上面的兩條命令可以實現將文件中的所有換行符替換為指定的字串,如命令中的冒號。命令的解釋:
:label; 這是一個標簽,用來實現跳轉處理,名字可以隨便取(label),后面的b label就是跳轉指令
N; N是sed的一個處理命令,追加文本流中的下一行到模式空間進行合並處理,因此是換行符可見
s/\n/:/; s是sed的替換命令,將換行符替換為冒號
b label 或者 t label b / t 是sed的跳轉命令,跳轉到指定的標簽處
標簽跳轉和N的追加命令實現了每一行的不間斷放入模式處理空間,從而不會漏掉每一個換行符,而沒有標簽的話跳轉的話,就只能每兩行替換掉一個換行符,對比效果:
$ echo "a,b,c,d" |sed 's/,/\n/g'|sed ':x;N;s/\n/,/;b x' a,b,c,d $ echo "a,b,c,d" |sed 's/,/\n/g'|sed 'N;s/\n/,/' a,b c,d
10. sed -e參數,並不真正編輯源文件,只是屏幕輸出
一條sed命令,刪除/etc/passwd第三行到末尾的數據,並把bash替換為blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' 1 root:x:0:0:root:/root:/bin/blueshell 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
e表示多點編輯,第一個編輯命令刪除/etc/passwd第三行到末尾的數據,第二條命令搜索bash替換為blueshell。
如果只是處理一個東西,可以省略-e ,接多個就不能省略
