SED基本用法和在文本中的使用

sed命令行格式為: 
sed [-nefri] ‘command’ 輸入文本/文件

常用選項: 
-n∶取消默認的輸出,使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到屏幕上。但如果加上 -n 參數后,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來 
-e∶進行多項編輯,即對輸入行應用多條sed命令時使用. 直接在指令列模式上進行 sed 的動作編輯 
-f∶指定sed腳本的文件名. 直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的sed 動作 
-r∶sed 的動作支援的是延伸型正則表達式的語法。(預設是基礎正則表達式語法)
-i∶直接修改讀取的文件內容,而不是由屏幕輸出

常用命令: 
a ∶ 新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行) 
c ∶ 取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行 
d ∶ 刪除,因為是刪除,所以 d 后面通常不接任何內容 
i ∶ 插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行) 
p∶ 列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起用 
s∶ 取代,可以直接進行替換的工作。通常這個 s 的動作可以搭配正則表達式。例如 1,20s/old/new/g

定址

定址用于決定對哪些行進行編輯。地址的形式可以是數字、正則表達式、或二者的結合。如果沒有指定地址,sed將處理輸入文件的所有行。 
地址是一個數字,則表示行號;是“$”符號,則表示最后一行。例如: 
sed -n ‘3p’ datafile 
只打印第三行 
只顯示指定行范圍的文件內容,例如:

只查看文件100到200行 
sed -n ‘100,200p’ mysql_slow_query.log 
地址是逗號分隔的,那么需要處理的地址是這兩行之間的范圍(包括這兩行在內)。范圍可以用數字、正則表達式、或二者的組合表示。例如:

sed ‘2,5d’ datafile 
刪除文件的2到5行 
sed ‘/My/,/You/d’ datafile 
刪除包含”My”的行到包含”You”的行之間的行 
sed ‘/My/,10d’ datafile 
刪除包含”My”的行到第十行的內容

舉例:(假設我們有一文件名為ab) 
刪除某行 
[root@localhost ruby] # sed ‘1d’ ab #刪除第一行 
[root@localhost ruby] # sed ‘d’ ab              #刪除最后一行  
[root@localhost ruby] # sed ‘1,2d’ ab           #刪除第一行到第二行  
[root@localhost ruby] # sed ‘2,d’ ab #刪除第二行到最后一行

顯示某行 
[root@localhost ruby] # sed -n ‘1p’ ab #顯示第一行 
[root@localhost ruby] # sed -n ‘p’ ab           #顯示最后一行  
[root@localhost ruby] # sed -n ‘1,2p’ ab        #顯示第一行到第二行  
[root@localhost ruby] # sed -n ‘2,p’ ab #顯示第二行到最后一行

使用模式進行查詢 
[root@localhost ruby] # sed -n ‘/ruby/p’ ab #查詢包括關鍵字ruby所在所有行 
[root@localhost ruby] # sed -n ‘/$/p’ ab #查詢包括關鍵字$所在所有行,使用反斜線\屏蔽特殊含義

增加一行或多行字符串 
[root@localhost ruby]# cat ab 
Hello! 
ruby is me,welcome to my blog. 
end 
[root@localhost ruby] # sed ‘1a drink tea’ ab #第一行后增加字符串”drink tea” 
Hello! 
drink tea 
ruby is me,welcome to my blog. 
end 
[root@localhost ruby] # sed ‘1,3a drink tea’ ab #第一行到第三行后增加字符串”drink tea” 
Hello! 
drink tea 
ruby is me,welcome to my blog. 
drink tea 
end 
drink tea 
[root@localhost ruby] # sed ‘1a drink tea\nor coffee’ ab #第一行后增加多行,使用換行符\n 
Hello! 
drink tea 
or coffee 
ruby is me,welcome to my blog. 
end

代替一行或多行 
[root@localhost ruby] # sed ‘1c Hi’ ab #第一行代替為Hi 
Hi 
ruby is me,welcome to my blog. 
end 
[root@localhost ruby] # sed ‘1,2c Hi’ ab #第一行到第二行代替為Hi 
Hi 
end

替換一行中的某部分 
格式:sed ‘s/要替換的字符串/新的字符串/g’ (要替換的字符串可以用正則表達式) 
[root@localhost ruby] # sed -n ‘/ruby/p’ ab | sed ‘s/ruby/bird/g’ #替換ruby為bird
[root@localhost ruby] # sed -n ‘/ruby/p’ ab | sed ‘s/ruby//g’ #刪除ruby

插入
[root@localhost ruby] # sed -i '$a bye' ab #在文件ab中最后一行直接輸入"bye" [root@localhost ruby]# cat ab Hello! ruby is me,welcome to my blog.
 end
 bye

替換:

-e是編輯命令,用于sed執行多個編輯任務的情況下。在下一行開始編輯前,所有的編輯動作將應用到模式緩沖區中的行上。

sed -e ‘1,10d’ -e ‘s/My/Your/g’ datafile 
選項-e用于進行多重編輯。第一重編輯刪除第1-3行。第二重編輯將出現的所有My替換為Your。因為是逐行進行這兩項編輯(即這兩個命令都在模式空間的當前行上執行),所以編輯命令的順序會影響結果。

替換兩個或多個空格為一個空格

sed ‘s/[ ][ ]*/ /g’ file_name

替換兩個或多個空格為分隔符:

sed ‘s/[ ][ ]*/:/g’ file_name

如果空格與tab共存時用下面的命令進行替換

替換成空格

sed ‘s/[[:space:]][[:space:]]*/ /g’ filename

替換成分隔符:

sed ‘s/[[:space:]][[:space:]]*/:/g’ filename

==============

sed命令的調用: 
在命令行鍵入命令;將sed命令插入腳本文件,然后調用sed;將sed命令插入腳本文件,并使sed腳本可執行 
sed [option] sed命令 輸入文件 在命令行使用sed命令,實際命令要加單引號 
sed [option] -f sed腳本文件 輸入文件 使用sed腳本文件 
sed腳本文件 [option] 輸入文件 第一行具有sed命令解釋器的sed腳本文件 
option如下: 
n 不打印; sed不寫編輯行到標準輸出,缺省為打印所有行(編輯和未編輯),p命令可以用來打印編輯行 
c 下一命令是編輯命令,使用多項編輯時加入此選項 
f 如果正在調用sed腳本文件,使用此選項,此選項通知sed一個腳本文件支持所用的sed命令,如 
sed -f myscript.sed input_file 這里myscript.sed即為支持sed命令的文件 
使用重定向文件即可保存sed的輸出 
使用sed在文本中定位文本的方式: 
x x為一行號,比如1 
x,y 表示行號范圍從x到y,如2,5表示從第2行到第5行 
/pattern/ 查詢包含模式的行,如/disk/或/[a-z]/ 
/pattern/pattern/ 查詢包含兩個模式的行,如/disk/disks/ 
/pattern/,x 在給定行號上查詢包含模式的行,如/disk/,3 
x,/pattern/ 通過行號和模式查詢匹配行,如 3,/disk/ 
x,y! 查詢不包含指定行號x和y的行

基本sed編輯命令: 
p 打印匹配行 c/ 用新文本替換定位文本 
= 顯示文件行號 s 使用替換模式替換相應模式 
a/ 在定位行號后附加新文本信息 r 從另一個文本中讀文本 
i/ 在定位行號后插入新文本信息 w 寫文本到一個文件 
d 刪除定位行 q 第一個模式匹配完成后退出或立即退出 
l 顯示與八進制ASCII代碼等價的控制字符 y 傳送字符 
n 從另一個文本中讀文本下一行,并附加在下一行 {} 在定位行執行的命令組 
g 將模式2粘貼到/pattern n/

基本sed編程舉例: 
使用p(rint)顯示行: sed -n ‘2p’ temp.txt 只顯示第2行,使用選項n 
打印范圍: sed -n ‘1,3p’ temp.txt 打印第1行到第3行 
打印模式: sed -n ‘/movie/’p temp.txt 打印含movie的行 
使用模式和行號查詢: sed -n ‘3,/movie/’p temp.txt 只在第3行查找movie并打印 
顯示整個文件: sed -n ‘1,為最后一行 
任意字符: sed -n ‘/.*ing/’p temp.txt 注意是.*ing,而不是*ing 
打印行號: sed -e ‘/music/=’ temp.txt 
附加文本:(創建sed腳本文件)chmod u+x script.sed,運行時./script.sed temp.txt 
#!/bin/sed -f 
/name1/ a/ #a/表示此處換行添加文本 
HERE ADD NEW LINE. #添加的文本內容 
插入文本: /name1/ a/ 改成 4 i/ 4表示行號,i插入 
修改文本: /name1/ a/ 改成 /name1/ c/ 將修改整行,c修改 
刪除文本: sed ‘1d’ temp.txt 或者 sed ‘1,4d’ temp.txt 
替換文本: sed ‘s/source/OKSTR/’ temp.txt 將source替換成OKSTR 
sed ‘s////g’ temp.txt 將文本中所有的符號全部刪除 
sed ‘s/source/OKSTR/w temp2.txt’ temp.txt 將替換后的記錄寫入文件temp2.txt 
替換修改字符串: sed ‘s/source/”ADD BEFORE” &/p’ temp.txt 
結果將在source字符串前面加上”ADD BEFORE”,這里的&表示找到的source字符并保存 
sed結果寫入到文件: sed ‘1,2 w temp2.txt’ temp.txt 
sed ‘/name/ w temp2.txt’ temp.txt 
從文件中讀文本: sed ‘/name/r temp2.txt’ temp.txt 
在每列最后加文本: sed ‘s/[0-9]*/& Pass/g’ temp.txt 
從shell向sed傳值: echo NAME | sed “s/go/REP/g” 注意需要使用雙引號

原創文章,作者:huchaowei,如若轉載,請注明出處:http://www.www58058.com/74824

(0)
huchaoweihuchaowei
上一篇 2017-05-05
下一篇 2017-05-06

相關推薦

  • tcpdump輸出詳解

    在這里不得不再吐槽下國內整個IT粗糙浮躁,度娘下來的中文文檔幾盡抄襲~google下來的文檔英文文檔質量遠高于國內中文文檔.用ie或沒有安裝插件的瀏覽器訪問,不然可能會有其它訪問請求數據干擾分析 IP數據包結構 TCP數據包結構 // tcpdump需root權限 # tcpdump -x -i eth1 i…

    Linux干貨 2015-04-15
  • Linux的文件壓縮、解壓之tar的使用

    文件的壓縮   一、壓縮、解壓縮及歸檔工具 壓縮 解壓 后綴(壓縮后) file-roller 圖形操作界面上的使用(略) compress 解壓一:uncompress 或compress -d (注:使用上面的解壓命令,實際上是在屏幕上打印解壓的文件信息,并不是真正上解壓到文件,所以需要在命令后面加上“重定向到指定的文件中”,方可完成解壓。如:…

    Linux干貨 2016-08-18
  • VMware虛擬機三種連網原理簡介

    一、前言         虛擬機(Virtual Machine),在計算機科學中的體系結構里,是指一種特殊的軟件,可以在計算機平臺和終端用戶之間創建一種環境,而終端用戶則是基于這個軟件所創建的環境來操作系統軟件。虛擬機根據它們運用和與直接機器的相關性分為兩大類。系統虛擬機和程序虛擬機,系…

    Linux干貨 2015-08-03
  • N22-第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。      2、編輯/etc/group文件,添加組hadoop。 3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為…

    Linux干貨 2016-09-05
  • 計算機的組成和Linux發展史

    計算機的組成及功能   計算機是由CPU,內存,輸入裝置和輸出裝置四大部件組成計算機,每一部件分別按要求執行特定的基本功能。  CPU: 控制器和運算器合稱中央處理器,也就是CPU,它的功能主要是解釋計算機指令以及處理計算機軟件中的數據。  內存: 它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內存中進行的,內存(Me…

    Linux干貨 2016-10-30
  • CentOS 6上的防火墻策略的保存

    兩種iptables的策略保存的方法

    2018-02-27
欧美性久久久久