sed用法說明,sed用法

來源:互聯網
上載者:User

sed用法說明,sed用法
sed介紹

sed:stream editor

是一個行編輯器,或叫流編輯器,每次處理一行,處理完一行再處理下一行。sed並不直接處理源檔案,而是讀取一行後放入模式空間(patten space)裡,在這個模式空間中完成編輯,並輸出顯示。當然sed加上 –i 參數也可以直接原處理檔案。sed不僅有模式空間,還有一個叫保持空間的概念,模式空間和保持空間的內容可以相互交換,覆蓋,追加等,但是用的較少,用起來也比較燒腦,屬於sed的進階用法。

sed用法

sed [option]… ‘script’ inputfile … …

常用選項:

-n:不輸出模式中的內容到螢幕

-e:多點編輯

-f /path/to/script_file:從指定檔案中讀取編輯指令碼

-r:支援使用擴充Regex

-i:修改原檔案

地址定界:

1.不給地址:對全文進行處理

2.單地址:

            #:指定的行

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

3.位址範圍:

            #,#:表示從第幾行到第幾行

            #,+#:表示第幾行開始後的多少行

            /pat1/,/pat2/:表示從匹配到模式1開始到匹配到模式2之間的行

編輯命令:

d:刪除

p:顯示

a \text:在行後面追加文本;支援使用\n實現多行追加

i \text:在行前面插入文本;支援使用\n實現多行插入

c \text:替換行為單行或多行文本

w /path/to/somefile 儲存模式空間匹配到的行至指定檔案中

r /path/from/somefile:讀取指定檔案的文字資料流至模式空間中匹配到的行的行後

=:為模式空間中的行列印行號

!:取反

s///:替換標記,s///g行內全域替換;支援使用其它分隔字元,s@@@,s###

用法舉例:
[root@slave ~]# cat ifcfg-ens33 TYPE="Ethernet"BOOTPROTO="none"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAILURE_FATAL="no"IPV6_ADDR_GEN_MODE="stable-privacy"NAME="ens33"UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"DEVICE="ens33"ONBOOT="yes"IPADDR="192.168.100.20"PREFIX="24"GATEWAY="192.168.100.2"DNS1="114.114.114.114"IPV6_PEERDNS="yes"IPV6_PEERROUTES="yes"IPV6_PRIVACY="no"

1.顯示1到3行的內容

[root@slave ~]# sed -n '1,3p' ifcfg-ens33 TYPE="Ethernet"BOOTPROTO="none"DEFROUTE="yes"

2.刪除第2行至最後一行

[root@slave ~]# sed '2,$d' ifcfg-ens33 TYPE="Ethernet"

3.把192.168.100.20替換成192.168.100.30並只顯示此行

[root@slave ~]# sed -n 's/192.168.100.20/192.168.100.30/;/IPADDR/p' ifcfg-ens33 IPADDR="192.168.100.30"

4.把所有的IPV6換成ipv6

[root@slave ~]# sed -n '1,$ s/IPV6/ipv6/g;/ipv6/p' ifcfg-ens33 ipv6INIT="yes"ipv6_AUTOCONF="yes"ipv6_DEFROUTE="yes"ipv6_FAILURE_FATAL="no"ipv6_ADDR_GEN_MODE="stable-privacy"ipv6_PEERDNS="yes"ipv6_PEERROUTES="yes"ipv6_PRIVACY="no"

5.在第1行之前和第3行後面加入文本“hello sed”,並顯示1到4行

[root@slave ~]# sed -ne '1 i \hello sed\n===============' -e '3 a ===================\n\hello sed' -e '1,4p' ifcfg-ens33 hello sed===============TYPE="Ethernet"BOOTPROTO="none"DEFROUTE="yes"===================hello sedIPV4_FAILURE_FATAL="no"

6.刪除包含IPV6的行

[root@slave ~]# sed -e '/.*IPV6.*/d' ifcfg-ens33 TYPE="Ethernet"BOOTPROTO="none"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"NAME="ens33"UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"DEVICE="ens33"ONBOOT="yes"IPADDR="192.168.100.20"PREFIX="24"GATEWAY="192.168.100.2"DNS1="114.114.114.114"

7.從檔案sedscript讀入sed指令碼,要求將BOOTPROTO=”none”改成”static”,注釋掉所有包含IPV6的行,在檔案開始和結束行加===sed is a strong tool===,並將網關改成192.168.100.3最後將修改後的內容儲存到ifcfg-test檔案中

[root@slave sed]# cat sedscript #!/bin/sed -f# this is a sed script1 i \=== sed is strong tool === s/^IPV6/# IPV6/g s/none/static/s/192.168.100.2/192.168.100.3/$ a \=== sed is strong tool ===w ifcfg-test
[root@slave sed]# chmod +x sedscript [root@slave sed]# ./sedscript ifcfg-ens33 
[root@slave sed]# cat ifcfg-testTYPE="Ethernet"BOOTPROTO="static"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"# IPV6INIT="yes"# IPV6_AUTOCONF="yes"# IPV6_DEFROUTE="yes"# IPV6_FAILURE_FATAL="no"# IPV6_ADDR_GEN_MODE="stable-privacy"NAME="ens33"UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"DEVICE="ens33"ONBOOT="yes"IPADDR="192.168.100.30"PREFIX="24"GATEWAY="192.168.100.3"DNS1="114.114.114.114"# IPV6_PEERDNS="yes"# IPV6_PEERROUTES="yes"# IPV6_PRIVACY="no"
上面這個例子中的i和a插入和追加的內容沒有寫入到檔案中,但是用重新導向的方式可以。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.