首頁 > 網際網路

linux之sed命令詳解

2019-12-18 00:43:56

主要介紹下linux中sed命令的一些應用,sed主要用來對檔案進行一些處理,比如列印,追加,刪除,替換等,我這邊只對使用率比較高的一些引數進行介紹

1

首先我這邊先建一個字母大小轉換的指令碼test2.sh,內容如下:


2

先介紹些sed -n的應用:

sed命令中p能實現列印匹配行的功能。我們可以實際看下sed命令帶-n和不帶-n情況下有什麼不同。

sed -n "1p" test2.sh:帶-n選項的話,只列印test2.sh指令碼第一行匹配行。

sed "1p" test2.sh:不帶-n的話,不僅列印第一行匹配行,還列印輸出test2.sh指令碼的全部內容。


3

sed -n還可以列印檔案的範圍,比如列印test2.sh指令碼的前兩行,我們就可以執行以下命令:sed -n "1,2p" test2.sh,就可以直接列印前兩行。

sed命令可以列印匹配模式行,比如列印test2.sh指令碼匹配tr的行,就可以執行以下命令:

sed -n /tr/p test2.sh。

remark:如果不帶-n的話,除了列印匹配行外,還會列印指令碼的全部內容。



4

sed -e的應用。只有當sed命令傳遞多個編輯命令式,才會使用到-e。比如:我想列印/tr/匹配行,並且列印匹配行所在的行號,此時存在多個sed引數,就要用到-e了。

sed -n -e /tr/p -e /tr/= test2.sh

每個引數前都要帶上-e:


5

sed a追加命令,命令格式為:sed ’指定地址a追加內容‘ 目標檔案

這個追加內容在匹配行的下一行,只會輸出到標準輸出,原檔案內容是不變的,例如在test2.sh指令碼的/tr/所在的匹配行的下一行新增「#hello」內容,可需要執行:

sed '/tr/a#hello' test2.sh

一定不要忘記單引號.

還有一個sed i的追加命令,命令格式為:sed ’指定地址i追加內容‘ 目標檔案,跟a不同,i追加是在指定位置的上一行追加命令



6

sed命令中還有一些特殊的匹配,比如元字元匹配,此時需要用跳脫符""遮蔽其特殊意義。

比如:sed -n ‘/=/p’test2.sh,則列印輸出tr一行。

$在正規表示式中表示尾行,執行sed -n ‘$p’ test2.sh則列印指令碼尾行。

!表示取反,可以看以下兩個例子



7

sed中可以使用關鍵字來匹配行,列印我們所需要的內容,比如,我希望列印test2.sh第2,3行,可以執行:sed -n "2,3P" test2.sh,也可以執行sed -n "/tr/,/exit/p" test2.sh


8

sed c的應用,命令格式為:sed ’指定地址c替換內容‘ 目標檔案。比如,#hello,替換test2.sh指令碼的tr這行,可以執行命令:sed '/tr/c#hello' test2.sh


9

sed刪除d應用:比如我想刪除test2.sh的第2行,可以執行以下命令:sed "2d" test2.sh或者sed /tr/d test2.sh


10

sed替換s應用:格式 sed s/被替換的字元/替換字元/[替換選項]比如,我想把test2.sh中tr替換成大寫的tr,則可以執行以下命令:sed ‘s/tr/TR/’test2.sh,則把指令碼中的tr替換成TR,完後輸出全部內容。如果僅想列印替換所在行,則需要試用使用-n和-p:sed -n ‘s/tr/TR/p’ test2.sh:把指令碼中的tr替換成TR,然後列印tr所在的行.如果指令碼中存在好幾個tr,並且每一行也存在多個tr,如果執行以上命令的話,只會更改每一行的第一個出現的tr,如果要全部把tr轉後為TR,則需要新增G引數:sed -n ’S/tr/TR/pg’test2.sh。w引數是定向輸入引數,比
如要把上述的變更定向輸出到test1.txt中,則需要執行:sed -n ’s/tr/TR/pgw test1.txt’ test2.sh。也可以直接把選定的匹配內容寫到另一個文字中,比如想把test2.sh中tr這一樣寫到test2.txt中,執行:sed -n ’/tr/w test2.txt‘ test2.sh
中tr這一樣寫到test2.txt中,執行:sed -n ’/tr/w test2.txt‘ test2.sh

IT145.com E-mail:sddin#qq.com