sed是一種流編輯器,它是文本進行中非常重要的工具,能夠完美的配合正規表達式使用,功能不同凡響。處理時,把目前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接着用sed指令處理緩沖區的内容,處理完成後,把緩沖區的内容送到螢幕。接着處理下一行,這樣不斷重複,知道檔案末尾。檔案内容并沒有改變,除非你使用重定向存儲輸出。sed主要用來自動編輯一個或多個檔案;簡化對檔案的反複操作;編寫轉換程式。
列印某行
格式:sed -n 'n'p filename 單引号内的n是一個數字,表示第幾行。-n是隻顯示我們要列印的行。p将結果列印出來。
sed -n '/root/'p test.txt
sed列印出來沒有顔色顯示,grep列印有顔色顯示。
sed同樣可以使用{}、+、?、|、()這些符号,使用時必須加上脫義符\。(使用.*不用加脫義符)
加上-r參數時可以不用脫義符。
把所有行都列印出來
sed -n '1,$'p test.txt #$指行的結尾。
指定一個區間列印
sed -n '1,3'p test.txt
#列印第一到三行,單個數字n為列印第幾行。
查找以某個字元串開頭或結尾
注意:列印包含某個字元串的時候需要使用//将字元串放到裡面。例如 sed -n '1'p test.txt 這條指令是列印第一行。
sed -n '/1/'p test.txt 這條指令是列印含有字元1的行。
-e選項可以實作多個行為
加上i參數後,不區分大小寫。
删除指定的行
使用d參數,d表示删除動作
sed '1'd test.txt #删除檔案的第一行。
sed '1,20'd test.txt #删除檔案的1至20行。
這個删除操作進階是在顯示器螢幕上不顯示這些行而已,并沒有對文檔進行操作。
删除某個字元串比對的行
sed '/nologin/'d test.txt #删除含有nologin字元串的行。
-i 參數,直接修改檔案的内容
sed -i '1,20'd test1.txt #将檔案test1.txt中的1到20行删除
替換字元或字元串
s就表示替換的動作。參數g表示本行全局替換,如果不加g則隻替換本行出現的第一個。
除了使用/作為分隔符外,還可以使用@和#作為分隔符。
sed '1,2 s /ot/to/g' test.txt
#将文檔中第1、2行中所有的ot替換成to
不加參數g就隻替換第一個ot
删除檔案中的所有字母或所有數字
就是将檔案中的所有字母或數字替換成空。
sed 's/[0-9]//g' test.txt #删除檔案中所有數字
sed 's/[a-za-z]//g' test.txt#删除檔案中所有字母
調換兩個字元串的位置
在某一行前面加上字元串
a,i都是新增
a是目前的下一行 i是目前的上一行
sed '2a drink tea' test.txt #在檔案第二行後增加一行
sed '2i drink beer' test.txt #在檔案第二行前增加一行