日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sed的简单用法

發布時間:2025/6/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sed的简单用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????sed是一個文本流編輯器,行編輯器,通常用來處理一行文本。通常是把源文件復制一份,在內存中進行編輯操作。

????

?????sed每次工作時,是從源文件中復制出一行,放在自己專用的工作車間,稱為模式空間(pattern space),經過處理之后,將會送到標準輸出(stdout)。默認條件下,sed可以處理文本的所有行,但是我們也可以讓sed只處理符合條件的行,比如利用正則表達式進行文版過濾。即sed將行取到模式空間之后,首先要看取出的行是否是sed要關注匹配的到行,即是否跟要給定的模式匹配到的行,然后才進行編輯操作。然后再進行edit,再輸出到標準輸出。如果沒有被給定的模式匹配到,那么就不做編輯,直接輸出到標準輸出。

????sed內存內部還有一部分內存空間,稱為保持空間,即hold pace。如果讓模式空間跟保持空間的內容互相交換,就可以實現很多高大上的功能。

????sed使用的基本格式:

????sed [options] ... 'scripts' inputfile...(省略號意味著可以依次處理多行文本)

其中scripts主要包含兩部分:

????1.地址定界:確定文本處理的范圍;地址定界后+編輯命令

????????(1) 不給地址,空地址:對全文進行處理;

????? ?(2) 單地址:

????????????????#:一個數字,指定行;

????????????????/pattern/:被此模式所匹配到的每一行;

????????(3) 地址范圍

????????????????#,#:

????????????????#,+#:

????????????????#,/pat1/ 斜線必須要有

????????????????/pat1/,/pat2/

????????????????$:最后一行;

????????(4) 步進:~

????????????1~2:所有奇數行

????????????2~2:所有偶數行

????2.編輯命令

????????d:刪除;

????????p:顯示模式空間中的內容;被地址框定的行;

????????a ?\text:在行后面追加文本“text”,支持使用\n實現多行追加;

????????i ?\text:在行前面插入文本“text”,支持使用\n實現多行插入;

????????c ?\text:把匹配到的行替換為此處指定的文本“text”;整行替換,而不是某個字符;

????????w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;

????????r ?/PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行后面;文件合并;

????????=:為模式匹配到的行打印行號;

????????!:條件取反;

????????????地址定界!編輯命令; ?放在命令之前;

????????s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;

????????????替換標記

????????????????g:全局替換;

????????????????w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;

????????????????p:顯示替換成功的行;

????3.option

????? 常用選項:

????????-n:不輸出模式空間中的內容至屏幕;

????????-e script, --expression=script:多點編輯,在一個sed中可以指定多個編輯腳本

????????-f ?/PATH/TO/SED_SCRIPT_FILE;每行一個編輯命令;

????????-r, --regexp-extended:支持使用擴展正則表達式;

????????-i[SUFFIX], --in-place[=SUFFIX]:直接編輯原文件 ;較危險;

????????

????#示例,刪除fstab中第1行至第五行:1,5表示1到5行,d表示刪除;? ?????

[root@wangxin?tmp]#?cat?fstab?# #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0 [root@wangxin?tmp]#?sed?'1,5d'?fstab? #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0


##刪除"#"開頭的所有行? ,d表示刪除; ?

[root@wangxin?tmp]#?sed?'/^#/d'?fstab?UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0

###顯示fstab的偶數行,d表示刪除‘1~2’的行,即奇數行

[root@wangxin?tmp]#?sed?'1~2d'?fstab? # #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' # UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0


####fatab的奇數行顯示兩遍,因為無-n參數,即把模式空間與模式空間處理之后的情況全部顯示出來。

[root@wangxin?tmp]#?sed?'1~2p'?fstab?# #?/etc/fstab #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0


#僅顯示奇數行,要加-n參數,禁止模式空間中的內容顯示

[root@wangxin?tmp]#?sed?-n?'1~2p'?fstab?#?/etc/fstab # #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0


#在第三行前面插入“new line”字符,添加插入在行之前,用i;

[root@wangxin?tmp]#?sed?'3i?new?line'?fstab?# new?line #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0

##在第三行前面插入“new line” 及“another”多行增加用 \n

[root@wangxin?tmp]#?sed?'3i?\new?line\nanother'?fstab?# new?line another #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0


###在所有以UUID開頭的行的前面添加“add new delice”的注釋,a表示添加在符合的行之后;

[root@wangxin?tmp]#?sed?'/^UUID/a?\#?add?new?delice?'?fstab?# #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 #?add?new?delice? UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 #?add?new?delice? UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 #?add?new?delice? UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0 #?add?new?delice


#把所有以UUID開頭的行替換為“add new delice”,c表示替換;

[root@wangxin?tmp]#?sed?'/^UUID/c?\#?add?new?delice?'?fstab?# #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # #?add?new?delice? #?add?new?delice? #?add?new?delice? #?add?new?delice


#顯示所有非#開頭的行,p表示打印顯示

[root@wangxin?tmp]#?sed?-n?'/^[^#]/p'?fstab? UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0

#將所有非#開頭的行寫到/root/fstab.new文件,使用w

[root@wangxin?tmp]#?sed?-n?'/^[^#]/w?/root/fstab.new'?fstab? [root@wangxin?tmp]#?cat?/root/fstab.new? UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0


#取/etc/issue的內容合并到/etc/fatab的第8行上面,r表示將內容合并;

[root@wangxin?tmp]#?sed?'8r?/etc/issue'?/etc/fstab# #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # \S Kernel?\r?on?an?\mMage?Education?Learning?Services http://www.magedu.comUUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0


#在所有的UUID開頭的行前面都添加一個/etc/issue的內容,r表示將內容合并;

[root@wangxin?tmp]#?sed?'/^UUID/r?/etc/issue'?/etc/fstab# #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 \S Kernel?\r?on?an?\mMage?Education?Learning?Services http://www.magedu.comUUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 \S Kernel?\r?on?an?\mMage?Education?Learning?Services http://www.magedu.comUUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 \S Kernel?\r?on?an?\mMage?Education?Learning?Services


##為每一個UUID開頭的行添加行號,=添加行號

[root@wangxin?tmp]#?sed???'/^UUID/='?fstab?# #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info # 9 UUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 10 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 11 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 12 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0


#刪除所有非#的行,!取非,放在命令d之前

[root@wangxin?tmp]#?sed?'/^#/!d'?fstab? # #?/etc/fstab #?Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015 # #?Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info #


#刪除/boot/grub/grub2.cfg文件中所有以空白字符開頭的行的行首的所有空白字符;s之前空格表示全局;

[root@wangxin?tmp]#?sed??'?s@^[[:space:]]\+@@'?/etc/grub2.cfg? # #?DO?NOT?EDIT?THIS?FILE # #?It?is?automatically?generated?by?grub2-mkconfig?using?templates #?from?/etc/grub.d?and?settings?from?/etc/default/grub ####?BEGIN?/etc/grub.d/00_header?### set?pager=1if?[?-s?$prefix/grubenv?];?then load_env fi if?[?"${next_entry}"?]?;?then set?default="${next_entry}" set?next_entry= save_env?next_entry set?boot_once=true else



#刪除/etc/fstab文件中所有以#開頭的行的行首的#號及#后面的所有空白字符;

[root@wangxin?tmp]#?sed?'?s@^#[[:space:]]*@@'?/etc/fstab?/etc/fstab Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?infoUUID=385ac324-78fe-4c44-9727-a12e14996ab4?/???????????????????????xfs?????defaults????????0?0 UUID=b585757f-8cb2-49e7-add1-e5abae66357b?/boot???????????????????xfs?????defaults????????0?0 UUID=e9e329ef-8661-48ff-8c8c-8bba952402c6?/usr????????????????????xfs?????defaults????????0?0 UUID=1bbc2e62-42d1-44c6-8ce8-7e8df4e56190?swap????????????????????swap????defaults????????0?0


#刪除/etc/fstab文件中所有以#開頭的行的行首的#號及#后面的所有空白字符;并且將UUID的行刪除;

使用-e多點編輯;

[root@wangxin?tmp]#?sed??-e??'s@^#[[:space:]]*@@'???-e??'/^UUID/d'??/etc/fstab/etc/fstab Created?by?anaconda?on?Sun?Dec??6?21:32:10?2015Accessible?filesystems,?by?reference,?are?maintained?under?'/dev/disk' See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info


#輸出一個絕對路徑給sed命令,取出其目錄,其行為類似于dirname;將行尾的非/字符替換為空即可,注意錨定行尾,至少出現一次,同時為了避免尾末有斜,在加一個\/?表示可有可無,\表示轉義;

[root@wangxin?tmp]#?echo?"/opt/soft/Heartbeat-3.0.5.tar.bz2"?|?sed?'?s@[^/]\+/\?$@@' /opt/soft/

或者

echo?"/opt/soft/Heartbeat-3.0.5.tar.bz2"?|?sed?-r?'?s@[^/]+/?$@@' /opt/soft/


下面的高級命令需要腦洞大開。

高級編輯命令:

????h:把模式空間中的內容覆蓋至保持空間中;

????H:把模式空間中的內容追加至保持空間中;

????g:把保持空間中的內容覆蓋至模式空間中;

????G:把保持空間中的內容追加至模式空間中;

????x:把模式空間中的內容與保持空間中的內容互換;

????n:覆蓋讀取匹配到的行的下一行至模式空間中;

????N:追加讀取匹配到的行的下一行至模式空間中;

????d:刪除模式空間中的行;

????D:刪除多行模式空間中的所有行;

示例:

????

????sed ?-n ?'n;p' ?FILE:顯示偶數行;

????sed ?'1!G;h;$!d' ?FILE:逆序顯示文件的內容;

????sed ?’$!d' ?FILE:取出最后一行;

????sed ?'$!N;$!D' FILE:取出文件后兩行;

????sed '/^$/d;G' FILE:刪除原有的所有空白行,而后為所有的非空白行后添加一個空白行;

????sed ?'n;d' ?FILE:顯示奇數行;

????sed 'G' FILE:在原有的每行后方添加一個空白行;


以上為sed的基本用法。

轉載于:https://blog.51cto.com/niefeifly/1728848

總結

以上是生活随笔為你收集整理的sed的简单用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。