sed命令詳解


  一、基礎篇

  1、sed工作原理

  sed工作的過程是先從文件中讀取一行內容到模式空間里即sed專屬的緩存空間,然后判斷這行內容是否是需要處理的內容,如果不是就繼續從文件中讀取下一行,否則對改行內容進行相應處理后輸出,然后繼續讀取下一行進行判斷或處理,直到文件最后一行處理完畢整個過程結束。

 

  2、sed命令使用說明

  sed命令格式如下:

    sed  參數  功能選項  文件名或其他標准輸入

  

  sed參數如下:

    -i  修改文件內容

    -n  取消默認輸出

 

  sed功能選項如下:

    a  追加內容到指定行后

    i  插入內容到指定行前

    d  刪除指定行

    c  用新行替換舊行(不常用)

    s  對每一行第一次匹配到的內容進行替換,配合標志g可以將一行中所有匹配到的內容進行替換

    p  輸出指定內容,默認會輸出2次匹配到的內容

 

  sed指定操作行的格式有以下幾種:

    10             匹配第十行
    10,20                匹配第十行到第二十行
    10,+20            匹配第十行到第三十行(10+20)
    1~2              匹配第一行開始的奇數行
    10,$             匹配第十行到最后一行
    /oldboy/             匹配有oldboy的行
    /oldboy/,/Alex/        匹配有oldboy的行到有Alex的行
    /oldboy/,$          匹配有oldboy的行到最后一行
    /oldboy/,10           匹配有oldboy的行到第十行,如果前十行沒有匹配到有oldboy的行會對后面匹配到有oldboy的行進行操作
    1,/Alex/           匹配第一行到有Alex的行
    /oldboy/,+2           匹配有oldboy的行及之后的兩行

 

  sed的特殊操作:

    \1:反斜杠接數字是sed配合正則的分組匹配的特殊技巧名為后項引用,sed命令在使用正則匹配時會記住圓括號即分組匹配匹配到的內容,使用反斜杠接數字的方式即可取出對應順序被sed記住的內容,需要注意的是sed最多只能記住九個分組匹配的內容,也就是說反斜杠后面能接的最大的數字是九。

    &:在sed匹配中這個符號表示前面需要被替換掉的內容。

 

  3、企業實際使用案例

  1)優化SSH配置

#在ssh配置文件的13行之前插入5行配置,每一行配置用\n分隔
sed -i '13i Port 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no' /etc/ssh/sshd_config

 

  2)打印文件內容但不包含oldboy

  文件內容如下: 

  101,oldboy,CEO
  102,zhangyao,CTO
  103,alex,COO
  104,yy,CFO
  105,feixue,CIO

#將匹配有oldboy的行刪除即可在輸出內容中不顯示包含oldboy的行,因為沒加-i參數所以對#文件沒有實際影響
sed  '/oldboy/d' person.txt

 

  3)指定行修改配置文件

#修改selinux的配置文件,將selinux的級別從enforcing改為disabled
sed  -i  '7s/enforcing/disabled/'  /etc/selinux/config

 

  4)系統開機啟動項優化

chkconfig  --list|grep '3:on'|grep  -vE  'sshd|crond|network|rsyslog|sysstat'|awk  '{print $1}'|sed -r  's/^(.*)/chkconfig \1 off/g'|bash

 

  5)批量重命名文件

  /test目錄下有如下文件:

  stu_1029999_1_finished.jpg stu_1029999_2_finished.jpg  stu_1029999_3_finished.jpg  stu_1029999_4_finished.jpg  stu_1029999_5_finished.jpg 

ls  /test/*jpg|sed -r 's/(^.*)_finished.*/mv & \1.jpg/g'|bash

 


免責聲明!

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



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