shell 三劍客之 sed 命令詳解


 sed 編輯命令

sed 編輯命令對照表

 

 

把 /etc/passwd 文件賦值到當前路徑下,進行操作

cp /etc/passwd ./
cat -n passwd

  

 

sed 刪除操作

刪除 passwd 文件的第一行

sed -i '1d' passwd 

 

刪除 1-3 行

sed -i '1,3d' passwd

 

刪除不能登錄的用戶,即 /sbin/nologin

sed -i '/\/sbin\/nologin/d' passwd

 

刪除以mail開頭一直到以 ftp開頭的行

sed -i '/^mail/,/^ftp/d' passwd

 

sed 增加操作  

在/bin/bash 行后面追加一句話 This is user which can login to system

 sed -i '/\/bin\/bash/a This is user which can login to system' passwd

 

行前追加 在 root 和 nginx之間所有行之前追加 AAAAAAAAAAAAAAAAAAAA

 sed -i '/^root/,/^nginx/i AAAAAAAAAAAAAAAAAAAA' passwd 

  

查找passwd文件中所有root的行,讀取 list 的內容追加到其后面

cat list

 

sed -i '/root/r list' passwd 

 

在passwd文件中將匹配到的 /bin/bash 行寫入到 /tmp/user_login.txt 文件中

 sed '/\/bin\/bash/w /tmp/user_login.txt' passwd

  

sed 修改操作  

修改:

  • s/pattern/string/ 查找並替換,查找符合pattern模式的字符串,將其替換為string 適配(一、二、三、四、五)
  • s/pattern/string/g g表示表示全部匹配
  • s/pattern/string/2g 2g表示:同一行內,只替換前兩個匹配到的,剩下的不替換
  • s/pattern/string/ig 加i參數表示匹配時忽略大小寫,g表示匹配到的全部替換

把 /bin/bash 全部替換為/BIN/BASH

sed -i 's/\/bin\/bash/\/BIN\/BASH/g' passwd

  

只替換第一個root為ROOT

sed -i 's/root/ROOT/' passwd 

 

只替換 一行的第二個

cat str.txt 

 

sed -i 's/HADOOP/hadoop/2' str.txt 

 

反向引用

把匹配到的內容原封不動的保留下來 

 cat file.txt

sed -i 's/Had..p/&s/g' file.txt

 

 

\1 也可以表示前面匹配到的內容 (比 & 更加靈活)

sed -i 's/\(had..ps\)/\1R/g' str.txt

 

定義變量的時候如果使用單引號 ' 不會引用變量,注意需要使用雙引號"$var" 

sed 命令用法總結

查詢:

  • p 打印

刪除:

  • d 刪

增加:

  • a 匹配到的行后追加內容
  • i 匹配到的行前追加內容
  • r 將后面指定文件的內容追加到匹配到的行后面
  • w 將匹配到的行內容另存到其他文件中

修改:

  • s/pattern/string/ 查找並替換,查找符合pattern模式的字符串,將其替換為string 適配(一、二、三、四、五)
  • s/pattern/string/g g表示表示全部匹配
  • s/pattern/string/2g 2g表示:同一行內,只替換前兩個匹配到的,剩下的不替換
  • s/pattern/string/ig 加i參數表示匹配時忽略大小寫,g表示匹配到的全部替換

其他編輯命令:

  • = 顯示行號

 

什么是反向引用

  • &和\1 引用模式匹配到的整個串

在file中搜尋以1開頭,然后跟兩個任意字符,以e結尾的字符串

sed "s/1..e/&r/g" file

  

和上面實現一樣的功能,使用\1代表搜尋到的字符串

sed "s/\(1..e\)/\1r/g" file

上面兩種方式實現了一樣的功能,分別使用&和\1引用前面匹配到的整個字符串 兩者區別在於&只能表示匹配到的完整字符串,只能引用整個字符串:而\1可以使用()對匹配到的字符串進行二次操作

例如:如果我們僅想要替換匹配到的字符串的一部分,name必須使用\1這種方式,不能使用&

  

sed中引用變量時注意事項:

  • 1、匹配模式中存在變量,則建議使用雙引號
  • 2、sed中需要引入自定義變量時,如果外面使用單引號,則自定義變量也必須使用單引號

 


免責聲明!

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



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