sed的一些基本應用

2021-09-29 14:56:51 字數 2129 閱讀 9995

流式編輯器,可以實現非互動式的文件增、刪、改、查動作,預設是對文件進行逐行處理的。配合正規表示式能夠實現更加準確的定位與修改。

常用指令為:

p列印輸出、d刪除和s替換

格式:1.前置命令(需要能夠生成文字的) | sed -選項 (定址符)指令

2.sed -選項 (定製符)指令 目標文件

條件可以是行號或者/正則/

沒有條件時,預設為所有條件

指令可以是增、刪、改、查等指令

預設sed會將所有輸出的內容都列印出來,可以使用-n遮蔽預設輸出

選項中可以使用-r選項,讓sed支援擴充套件正則

常用選項

實際應用

~]# sed '1p' /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

通過在p前新增定址符,可以實現精確定位需要執行操作的文字行,如列印第一行小括號內輸入的是『1p』。一般p輸出指令會配合-n選項取消預設輸出使用,不加的話就會在列印第一行文字的基礎上,再輸出整個文件的內容,我們一般只需要看我們選擇輸出的行的內容就夠了。

~]# sed  -n '3,6p' /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

也可以是連續的行。

~]# sed -n 『1~2p』 /etc/passwd		#從第1行開始,跳兩行看一次,即看奇數行
也可以是不連續的行。

對於定位到某目標行的操作與指令p類似,但因為涉及對文件內容的修改,需要注意-i選項。正常情況下,sed命令所做的處理只是把操作結果(包括列印、刪除等)輸出到當前終端螢幕,而並不會對原始檔案做任何更改。

~]# sed -i '1,4d' test.txt         		   #新增-i選項可對文件內容進行實際修改
~]# sed 's/2017/***x/'      test.txt		#將文件每行匹配到的第乙個2017替換成「***x」

t]# sed '3s/2017/***x/ test.txt #替換文件的第三行的2017為「***x」

~]# sed 's/2017/***x/g' test.txt #末尾的g新增是所有替換的意思,即將文件內所有的2017都換成「***x」

在實際應用中,需求可能是千變萬化的,某行或者某些行的模糊定位很難能夠滿足定位需要,使用正規表示式能夠很好的解決這一問題。

~]# sed -n '/root/p' /etc/passwd			#在/etc/passwd中列印有「root」字元的行

~]# sed -n '/bash$/p' /etc/passwd #在/etc/passwd中列印以「bash」字元結尾行

~]# sed '/xml/!d' a.txt #刪除不包含xml的行,!符號表示取反

(給大寫字母加上括號)

~]# sed -r 's/([a-z])/(\1)/g' hello.txt

(h)ello the (w)orld

ni hao (m)a bei(j)ing

(首尾字元互換)

]# sed -r 's%^(.)(.*)(.)$%\3\2\1%' hello.txt

dello the worlh

gi hao ma beijinn

以上僅僅是正規表示式的簡單應用,sed與正規表示式還有更多的應用配合,有興趣的朋友可以去作更深入的了解。

sed的一些應用

sed 在滲透的時候很有作用 具體如下 以下命令將a.txt文字中的所有的 127.0.0.1 替換為 192.168.0.8 sed i s 127.0.0.1 192.168.0.8 g a.txt 如果不想改動原檔案a.txt,則可以用以下命令生成新檔案new.txt sed e s 127....

sed的一些應用

1.sed 使用變數進行替換,注意使用引數 r 時,需要放在引數 i 的前面 下面這個例子是用2.txt中的版本號替換docker compose.yml中的版本號,其中變數upgrade name在兩個檔案中都有且一樣 for line in cat 2.txt do upgrade name e...

日期類的建立和一些基本應用。

includeusing namespace std class date 拷貝建構函式,使用類建立新類。date const date d year d.year month d.month day d.day 輸出符號的過載。ostream operator 賦值的過載。date operato...