Linux shell sed 命令詳解


 詳細的sed命令詳解,請參考https://my.oschina.net/u/3908182/blog/1921761

sed命令常見用途

  1. 查找關鍵詞做全局替換
  2. 查找某行的關鍵詞做替換
  3. 查找關鍵字所在行,並且執行指定關鍵字的替換
  4. 在某行之后追加
  5. 查找關鍵字,並且在第二行追加
  6. 刪除包含關鍵字的行
  7. 查看指定的行
  8. 在最后一行追加
  9. 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 ,接多個就不能省略


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM