三劍客之sed 基本使用

一.  sed是一種逐行處理的流編輯器,在文本處理中非常有用。在shell等腳本文件中,可以使用sed來對文件進行替換編輯等操作。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲『模式空間』(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。sed主要用來自動編輯一個或多個文件,簡化對文件的反覆操作,編寫轉換程序等

二. 參數說明

  • a :追加, a 的後面可以接字串,而這些字串會在當前行的下一行
  • c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行
  • d :刪除,因爲是刪除,所以 d 後面通常不加任何內容
  • i :插入, i 的後面可以接字串,而這些字串會在當前行的上一行(取代當前行的行號)
  • p :打印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行
  • s :替換,對字符串進行處理,通常這個 s 的動作可以搭配正規表達式,例如 1,20s/old/new/g

三. 操作實例

1. 'p' 打印,打印通常與-n選項連用,屏蔽默認輸出,只顯示匹配內容

打印第1行

sed -n '1p' /etc/passwd

打印1到10行

sed -n  '1,10p'  /etc/passwd

打印倒數第一行

sed  -n '$p'  /etc/passwd

打印包含'root'的行

sed  -n  '/root/p'  /etc/passwd

打印奇數行

sed  -n  '1~2p'   /etc/passwd     //從第一行開始,步長爲2

打印偶數行

sed  -n  '2~2p'   /etc/passwd     //從第二行開始,步長也爲2

2.  'd' 刪除

刪除包含'root'的行

sed '/root/d'   /etc/passwd

刪除第10行

sed  '10d'  /etc/passwd

刪除最後一行

sed  '$d'  /etc/passwd

刪除5到10行

sed  '5,10d'  /etcp/passwd

刪除第5行和第10行

sed  '5d;10d'  /etc/passwd

3.'a' 追加

將'this a test line '追加到以root開頭的行後

sed  '/^root/a\this a test line'  /etc/passwd

將'this a test line'追加到第5行後

sed  '5a\this a test line'  /etc/passwd

4. 'i'插入

將'this a test line'插入到以root開頭的行前

sed  '/^root/i\this a test line '  /etc/passwd

將'this a test line ' 插入到第5行前

sed  '5i\this a test line '  /etc/passwd

5. 'c' 取代,c修改一整行,s僅修改某個關鍵詞

將包含root的行替換爲xxx

sed '/root/c\xxx' /etc/passwd

將第5到10行取代爲'this a test line'

sed '5,10c\this a test line'  /etc/passwd

6. 's'替換,加 '-i' 選項會直接修改原文件

sed -n 's/ / /p'   file             搭配用顯示替換的那一行

sed的/ / /可以替換爲任意符號,如:sed -n 's# # #p'   file

將文件中每一行的第一個bash替換爲BASH

sed    's/bash/BASH/' /etc/passwd  

將文件中每一行的第二個bash替換爲BASH

sed  's/bash/BASH/2'  /etc/passwd

將文件中所有的bash替換爲BASH,加參數 ‘g’

sed    's/bash/BASH/g' /etc/passwd

將文件中包含www那一行所有的1001替換爲1002

sed   '/www/s/1001/1002/g' /etc/passwd

將文件中第10行的'bin'替換爲'BIN'

sed    '10s/bin/BIN/'  /etc/passwd

將文件中第1到10行中所有的'bin'替換爲'BIN'

sed     '1,10s/bin/BIN/g'  /etc/passwd

將文件中最後一行的'bin'替換爲'BIN'

sed    '$s/bin/BIN'  /etc/passwd

在每行的行尾添加xxx

sed   's/$/ xxx'  /etc/passwd

將passwd文件中倒數第10行中'bin'替換爲'BIN'

tac /etc/passwd | sed '10s/bin/BIN/' | tac

 

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