概述
基本命令格式:
sed 選項 '命令' 文字
選項主要有:
-n : 取消預設輸出。當使用-n引數時,文字不會被列印到螢幕上。可以配合使用p引數,將匹配到的內容列印到螢幕上。
-e:允許執行多個指令碼
-f:指定執行指令碼
-i:修改原始檔案內容
-r:在指令碼中使用擴充套件表示式
命令:
p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行~
s :替換,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!
d :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;a :追加, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
由上可知sed主要用於文字的追加、替換、刪除、插入等。
下面示例的文字為score.txt的檔案:
name no. math english computer total
---------------------------------------------
marry 2143 78 84 77 239
jack 2321 66 78 45 189
tom 2122 48 77 71 196
mike 2537 87 97 95 279
bob 2415 40 57 62 159
---------------------------------------------
#匹配第一行
sed -n '1 p' score.txt
#匹配最後行
sed -n 'n p' score.txt
#匹配第1-3行
sed -n '1,3 p' score.txt
#匹配奇數行
sed -n '1,2 p' score.txt
#匹配偶數行
sed -n '0,2 p' score.txt
#匹配第1行後面的5行內容,即1-6行
sed -n '1,+5 p' score.txt
正則匹配和shell的基本一樣,只是需要將正規表示式內容放到「/.../」內,示例:
sed -n '/正規表示式/' 文字
正則匹配字元也一樣,只是需要注意的是,對於+、?、是特殊字元,在正規表示式內需要轉義,例如使用+匹配,需要這樣寫:
#匹配7出現至少一次的行
sed -n '/7\+/' 文字
簡單些幾個示例命令:
#匹配7出現3次及以上的行
sed -n '/7\/ p' score.txt
#匹配以t開頭的行
sed -n '/^t/ p' score.txt
#匹配包含t或m的行
sed -n '/[tm]/ p' score.txt
語法:
s/正規表示式/替換內容/flag
flag主要有:
g: 全域性匹配,替換所有符合條件的字元
數字:替換第n個匹配到的內容,n為數字
p:替換第乙個匹配到的字元,並將緩衝區輸出到標準輸出
空:替換第乙個匹配到的字元
#將文中所有7替換為9
sed -n 's/7/9/g p' score.txt
sed -n 's/7/9/2 p' score.txt
sed -n 's/7/9/p' score.txt
sed -n 's/7/9/ p' score.txt
只在第1-3行中匹配
sed -n '1,3 s/7/9/g p' score.txt
&:引用匹配模式。
例如我們想匹配tom,並將匹配到的內容替換為dev tom,可以用&字元表示匹配模式中的內容
sed -n 's/tom/dev &/g p' score.txt
\n。子串。
在正規表示式裡用括號括起來表示乙個子表示式。在替換字元中用\1,\2可以引用第1、2個子表示式
例如我們想數學、英語成績統計反了,想顛倒過來。可使用下面方式。
sed 's/\(math\) \(english\)/\2 \1/g ' score.txt
注意:在sed中括號需要用轉義表達,\(;\)
語法:
sed '正規表示式 d' 檔案
其中正規表示式和1中匹配行、字元的匹配規則一樣。
例如我們想刪除第3行
sed '3 d' score.txt
追加:在匹配到行內容後面一行新增
sed '正規表示式 a 插入的字元' 檔案
這裡的正規表示式和前面講的一樣
示例:
#在第三行後新增*
sed '3 a *********************************************' score.txt
#在tom行後新增*
sed '/tom/ a *********************************************' score.txt
插入:在匹配到行內容前面一行新增
sed '正規表示式 i 插入的字元' 檔案
這裡的正規表示式和前面講的一樣
示例:
#在第三行前面新增*
sed '3 i *********************************************' score.txt
#在tom行前面新增*
sed '/tom/ i *********************************************' score.txt
比較看下a和i區別。
語法:
sed -e '命令1' -e '命令2' -e '命令n' 文字
示例
先將文字中的7替換為9,然後列印第2、3行
sed -n -e 's/7/9/g ' -e '2,3 p' score.txt
語法:
sed -e '命令1;命令2;命令n' 文字
先執行命令1再執行命令2
示例
先將文字中7替換為9,然後在第3行後面插入97
sed -e 's/7/9/g;3 a 97' score.txt
語法:
sed '區域 ' 檔案
示例
對1-5行,先將tom替換為tom,再在第3行後插入97,然後列印。
sed -n '1,5 ' score.txt
Ubuntu系統學習
分割槽 檔案系統型別 預設為 ext4,檔案系統分很多種,ext2 ext3 ext4 fat ntfs等等 什麼是檔案系統 檔案系統是作業系統用於明確磁碟或分割槽上的檔案的方法和資料結構 即在磁碟上組織檔案的方法。兩種檔案系統的對比 linux目錄結構 所有目錄都在 boot boot 配置檔案 ...
系統學習 css
1 css載入過程 瀏覽器對多個樣式 進行疊加,把各個零散的整合成乙個整體,讓後者覆蓋前者 important有最高執行權 瀏覽器載入html dom樹 無樣式變化 瀏覽器載入css 渲染檢視樣式 2 css與html如何結合 選擇器 important id class tag 標籤選擇器 選擇器...
ROS系統學習
ros系統安裝 ros版本18.04,採用阿里雲映象,ros官網安裝教程 1 新增ros軟體源 設定你的電腦可以從 packages.ros.org 接收軟體.sudo sh c echo deb lsb release sc main etc apt sources.list.d ros late...