LINUX 文字處理命令 sed

2021-08-18 23:11:35 字數 3197 閱讀 8681

sed

sed為行編輯器,預設不編輯原檔案,僅對模式空間中的資料做處理。

sed 'addresscommand' file...   # 對file檔案中符合位址的哪些行(address)進行命令操作(command)

addresscommand之間沒有空格

address:

1. startline,endline

比如: 1,100           處理1到100行

2.  /regexp/  正規表示式

比如: /^root/  開頭為root的行

3.  /pattern1/,/pattern2/

比如:第一次符合pattern1的行開始,至第二次符合pattern2的行,之間的行

4. startline,+n

從starline行開始的n行,共n+1行

5.  $

最後一行

命令  commond

d    刪除

p    列印

a \string    在指定的行後面追加新行(string)

i  \string    在指定的行前面新增新行(string)

r file        讀取file檔案的內容再來新增到符合address的行後面。

w file        將file中符合address的行另存到file檔案中。

s /pattern/string/     將file中符合pattern的字串替換為string ,預設為每行中第一次被pattern匹配到的字串。

修飾符修飾符必須在命令的後面,比如: s /pattern/string/修飾符

g   全域性    s /pattern/string/g  全域性替換

i    忽略大小寫      s /pattern/string/i   匹配時忽略大小寫

例子:sed  -n 『20 ,30p』123.txt      列印123.txt中的第20到30行,帶 –n 是靜默輸出,也就是只輸出處理後的結果,不將整個模式空間的內容都輸出。

sed  -n 『20 ,+10p』123.txt      列印123.txt中的第20到30行

sed  -n 『20 ,$p』123.txt      列印123.txt中的第20到最後一行

sed  -n 『2~2p』123.txt      列印123.txt中的第2,4,6…偶數行

sed  -n 『1~2p』123.txt      列印123.txt中的第1,3,5…奇數行

sed  -n 『p』123.txt     將123.txt中的內容重複輸出。sed查詢輸出一次,p輸出一次。

sed  -n 『/xxw/p』123.txt  將匹配xxw的行都輸出,注:xxw不帶引號。在sed中,使用正規表示式,用//將正規表示式包圍起來。

sed  -n 『/xxw/,/ting/p』123.txt   對123.txt中匹配xxw的行和匹配ting的行之間的行進行列印操作

sed  -n 『10,/xxw/p』123.txt           對123.txt中第10行到匹配xxw的行之間進行p操作

sed  『2c  xiaodd』123.txt          對123.txt中第2行替換成xiaodd,並顯示。

sed   '3s#xxw#ting#g'  123.txt          對123.txt中的第3行進行xxw匹配並替換成ting

echo  xiao xian wen xxw is a man | sed 's#^.*en\([a-z].*\) is .*$#\1#g'    取出其中的xxw(分組替換)。

sed  -r  's#(.*)#&xxw#g'   123.txt  將123.txt中每行後面加上xxw,-r代表使用正則擴充套件表示式,$代表前面匹配的所有內容,並非是括號中的內容,如果需要,後面接\1  \2 等。

ls  *.txt  | sed  -r  's#(.*).txt#mv & \1.sh#e '   列出本目錄下所有txt檔案並傳遞給sed,sed匹配並替換出」mv  1.txt 1.sh 」  e的作用就是用來傳遞給bash執行。(修改目錄下所有.txt檔案改為.sh檔案,還有一種方法是用renname 例如: rename  .txt  .sh *.txt

注:在sed中 用 –r 後,後面的匹配括號不用接轉義\  .

sed  -n   '2p;4p;5p'  123.txt      顯示123.txt中的第2,4,5行

sed  -n 『20  d』123.txt           刪除123.txt中的第20行

sed  -n 『20 ,30d』123.txt          刪除123.txt中的第20到30行

sed  -n 『/xxw/d』123.txt                   刪除123.txt中匹配xxw的行

sed  『/xxw/a\is』123.txt                   在123.txt中匹配xxw的行後面增加1行is,然後輸出。注:這裡並沒有改變123.txt的內容,只是輸出改變而已。不帶–n ,因為帶了會只輸出增加的一行。

sed  『/xxw/i\is』123.txt                    在123.txt中匹配xxw的行前面增加1行is,然後輸出。

sed  『s/xxw/ting/』123.txt                 在123.txt中匹配xxw並將找到的第乙個替換成ting。

sed  『s/xxw/ting/g』123.txt                     在123.txt中匹配xxw並將找到的全部替換成ting。

sed  -i  's/25/xxw/'  123.txt   將123.txt中的匹配到的字串25替換成xxw並儲存到原檔案。等同於: echo  $(sed  's/25/xxw/'  123.txt)  > 123.txt

sed  『s/xxw/ting/i』123.txt       在123.txt中匹配xxw並將找到的第乙個替換成ting,忽略大小寫

sed  『s/xxw/ting/ig』123.txt      在123.txt中匹配xxw並將找到的全部替換成ting。忽略大小寫

sed  -n  '/^\//p'   123.txt        在123.txt中匹配以/開頭的行

注:    sed不向grep一樣,不管是否找到指定的模式,它的退出狀態都是0。只有當命令存在語法錯誤時,sed的退出狀態才不是0。所以在指令碼中想用[ $? -eq 0 ]來確認前面的sed語句是否執行錯誤是不可能的。

linux 文字處理sed

ed與sed的區別 sed是從ed發展來的,ed是針對當前行進行操作 sed是面向字元流的。sed和ed的應用定址有很大的區別。在ed中沒有指定位址的命令只影響當前行。sed遍歷檔案,每次讀取一行,這樣每行都是當前行,每行都應用這個命令,結果是sed對檔案中的每一行都應用了ed中沒有位址的命令。如s...

文字處理之SED

高階編輯命令 stream editor,行編輯器 sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時 緩衝區中,稱為 模式空間 pattern space 接著用sed命令處理緩衝區中的 內容,處理完成後,把緩衝區的內容送往螢幕。然後讀入下行,執行下乙個迴圈。如果沒有使諸如...

文字處理sed 實踐

利用sed 取出ifconfig命令中本機的ipv4位址 root oracle ifconfig eth7 eth7 link encap ethernet hwaddr 00 50 56 85 6e a1 inet addr 192.168.97.164 bcast 192.168.99.255...