sed

sed   

  • 是一個非交互式文本編輯器,可對文本文件和標準輸入進行編輯;只對緩衝區總共原始文件的副本進行編輯,並不編輯原始的文件.

  • 如果需要保存更改的內容需要重定向到另一個文件sed  'sed命令'  fff > ggg


使用以下場合

  • 大文件

  • 編輯命令複雜,在交互式編輯器中難以輸入

  • 對文件掃描一遍,但需要執行多個編輯參數



處理流程

  1. 讀入新的一行內容到緩存空間

  2. 從操作指令中去匹配第一條指令,判斷是否匹配模式.

  3. 如果不匹配,則忽略後續的編輯命令,回到第2步繼續去匹配下一條指令;

  4. 如果匹配則針對緩存的行執行編輯命令,完成後回到第2步繼續去匹配下一條指令;

  5. 所有指令都應用之後,輸出緩存行的內容;回到第1步繼續讀入下一行內容;

  6. 所有行處理完之後結束.


定義sed的三種方式:

  1.  sed 選項 '命令' 文件名

  2. sed 選項 -f 腳本 文件名

  3. ./sed腳本文件 文件名


sed選項

  • -n  不打印所有行到標準輸出

  • -e  可使用多個sed編輯命令

  • -f  調用sed腳本文件

  • -r  啓用擴展正則表達式

  • -i  直接編輯


sed編輯命令

  • {} 在定位行執行命令組

  • p 打印匹配行

  • q 匹配一次即退出

  • = 打印行號

  • d 刪除匹配行

  • n 處理下一行

  • s 替換字符串

  • y 變換字符

  • r 從另一個文件中讀文本

  • w 保存到另一個文件中

  • i\  定位行之前插入

  • a\ 定位行之後插入

  • c\ 修改匹配行

  • h  將模式緩衝區複製到保持緩衝區

  • H  保持緩衝區追加到模式緩衝區

  • x  互換模式和保持緩衝區

  • g  保持緩衝區複製到模式緩衝區

  • G  將模式緩衝區追加到保持緩衝區


文本定位

  • $         最後一行

  • x         x行        

  • x,y        x到y行

  • x,y!       不包含x到y行的行

  • /123/     包含123的行     

  • /123/,x    從與123匹配行到x行x,/123     

  • 從x行到與123匹配的行


下面給出一些命令示例:


r  從另一個文件中讀取文本

        sed '/root/r 文件名' 

w  將文寫入到一個文件 

        sed '/root/w 文件名' 

s  替換字符串  

        sed 's/root/1234/g' 

y  變換字符

        sed 'y/abcd/ABCD/g' 

c\修改文本

        sed '/root/c\ffffffff' 

n  處理匹配行的下一行

        sed '/root/{n;s/bin/ooo/g;}' 文件名

行首加# 

        sed -i‘s/^/#/g' qqq


sed '/^$/d;G'      先用sed  '/^$/d'  查找並刪除空行;然後用 sed G插入空行

sed 'G;G'       使一個文件中每一行都佔用三行空間(就是在每一行後邊插兩行空行)

sed '/regex/G'  查找後在後邊加入一空行

sed -n '$='     統計行數

sed -n '2,+3p'   輸出第二行及其後3行

sed -n 'n;p'    輸出偶數行

sed -n 'p;n'    輸出奇數行


刪除每行開頭的所有空格

    sed 's/^\s*//g'

刪除文件每行的第二個字符

    sed -r 's/(.)(.)(.*)/\1\3/' a

    sed 's/.//2' a

刪除文件每行的最後一個字符

    sed -r 's/(.*)(.)/\1/' a

    sed 's/.$//g' a

刪除文件每行的倒數第二個單詞。

    sed -nr 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4\5\6/p' 

刪除文件每行的最後一個單詞。

    sed -nr 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4/p'


大小寫轉換

sed中,使用\u表示大寫,\l表示小寫


1. 把每個單詞的第一個小寫字母變大寫:

sed 's/\b[a-z]/\u&/g' a    \b是單詞邊界,也可以用\<替換\b

2. 把所有小寫變大寫:

sed 's/[a-z]/\u&/g' filename

3. 大寫變小寫:

sed 's/[A-Z]/\l&/g' filename


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章