Linux三劍客-sed

Linux三劍客-sed

sed是一款流編輯器,它一次處理一行內容,用來對文字進行過濾與替換操作;處理時,把當前處理的行儲存在臨時緩衝區中(模式空間)然後用sed命令處理緩衝區中的內容,處理完後把緩衝區的內容送往螢幕。

sed使用

命令格式sed [option] ‘[地址定界] command’ file(s)常用option——version :顯示sed 版本——help   :顯示幫助文件-n,——quiet,——silent :靜默輸出,不列印至螢幕-e       :允許多個指令被執行-f       :從檔案中讀取指令-i       :慎用,該選項將直接修改原始檔-r       :在指令中允許使用正則表示式常用地址定界* 不給地址全文處理* 單地址:#:指定的行;/pattern/:被此處模式所能匹配到的每一行* 地址範圍:#,#; #,+#; /part/,/part/; #,/part/* ~:按步長進常用commandd   :刪除模式空間匹配的行,並立即啟用下一輪迴圈p   :列印當前模式空間內容,追加到預設輸出之後a   :在指定行後面追加文字,支援使用/n 多行追加i   :在行前面插入文字,支援使用/n 多行插入c   :替換單行或多行文字,支援使用/nw   :儲存模式匹配的行至指定檔案r   :讀取指定檔案的文字至模式空間中匹配到的行後=   :為模式空間中的行列印行號! :模式空間匹配取反s///:查詢替換 g :表示行內全域性替換 \l:下個字元轉為小寫 \L:把替換字母轉為小寫,直到\U或\E出現 \u:下個字元轉為大寫 \U:把替換字母轉為大寫,直到\U或\E出現 \E:停止以\L或\U開始的大小寫轉換

常用option演示

TYPE=“Ethernet”PROXY_METHOD=“none”BROWSER_ONLY=“no”BOOTPROTO=“dhcp”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”# 匹配包含BOOT的行[root@localhost test]# sed -n ‘/BOOT/p’ ifcfg-ens33 #-n 不顯示不匹配的行BOOTPROTO=“dhcp”ONBOOT=“yes”#匹配以BOOT為開始的行,並在後面插入#IPV4INIT=no[root@localhost test]# sed ‘/^BOOT/a #IPV4INIT=no’ ifcfg-ens33 TYPE=“Ethernet”PROXY_METHOD=“none”BROWSER_ONLY=“no”BOOTPROTO=“dhcp”#IPV4INIT=noDEFROUTE=“yes”IPV4_FAILURE_FATAL=“no”IPV6INIT=“yes”#刪除以 #開始的行(註釋行)[root@localhost test]# sed ‘/^#/d’ ifcfg-ens33TYPE=“Ethernet”PROXY_METHOD=“none”BROWSER_ONLY=“no”BOOTPROTO=“dhcp”DEFROUTE=“yes”# 重新編輯檔案[root@localhost test]# cat ifcfg-ens33 TYPE=“Ethernet”PROXY_METHOD=“none”BROWSER_ONLY=“no”BOOTPROTO=“dhcp”DEFROUTE=“yes”# 編寫sed。sh 指令碼[root@localhost test]# cat sed。sh /^$/d#對檔案ifcfg-ens33 執行 sed。sh 指令碼[root@localhost test]# sed -f sed。sh ifcfg-ens33 TYPE=“Ethernet”PROXY_METHOD=“none”BROWSER_ONLY=“no”BOOTPROTO=“dhcp”DEFROUTE=“yes”#查詢替換用-e[root@localhost test]# sed -e ‘s/yes/no/’ ifcfg-ens33 TYPE=“Ethernet”PROXY_METHOD=“none”BROWSER_ONLY=“no”BOOTPROTO=“dhcp”DEFROUTE=“no”地址定界演示#列印第一行開始的奇數行[root@localhost test]# sed -n ‘1~2p’ ifcfg-ens33 TYPE=“Ethernet”PROXY_METHOD=“none”DEFROUTE=“yes”# 刪除指定行[root@localhost test]# sed ‘2d’ ifcfg-ens33 TYPE=“Ethernet”PROXY_METHOD=“none”BROWSER_ONLY=“no”BOOTPROTO=“dhcp”#替換第4行n->N[root@localhost test]# sed ‘4s/n/N/g’ ifcfg-ens33 TYPE=“Ethernet”PROXY_METHOD=“none”BROWSER_ONLY=“No”命令演示[root@localhost test]# cat htmlsedh1 hello h1h2 hell h2h3 hel   h3# 給第一個H標籤加<>,給第二個H標籤加[root@localhost test]# cat sed。sh /h[0-9]/{s//\<&\>/1s//\<\/&\>/2}[root@localhost test]# sed -f sed。sh html sed

hello

hell

hel  

<、body>

Sed的高階用法

command:命令=:顯示行號n:讀取匹配模式的行的下一行到模式空間中,模式空間中匹配模式的行被刪除N:讀取匹配模式的行和匹配模式的下一行h:複製模板快的內容到記憶體中的緩衝區,如果原來緩衝區有內容被覆蓋H:追加模板塊的內容到記憶體中的緩衝區g:獲得記憶體緩衝區的內容,並替代當前模板塊中的文字G:獲得記憶體緩衝區的內容,並追加到當前模板塊文字的後面d:刪除pattern中的所有行,並讀入下一新行到pattern中# 測試用例文字moke@DESKTOP:~$ cat testzz xx tom xx tom rhce xx rhce xx xx tom xx rhce xx tom xxxx xx tom xx rhce xx xxxxx xxx tom rhce xx xxyyyy rhce yyyyy# = 用法; 顯示ce 開頭的行號moke@DESKTOP:~$ sed “/^ce/=” testzz xx tom xx tom rhce xx rh2ce xx xx tom xx rhce xx tom xxxx xx tom xx rhce xx xxxxx xxx tom rhce xx xxyyyy rhce yyyyy# n用法;匹配zz開頭的行的下一行tom改為TOMmoke@DESKTOP:~$ sed “/^zz/{n;s/tom/TOM/g}” testzz xx tom xx tom rhce xx rhce xx xx TOM xx rhce xx TOM xxxx xx tom xx rhce xx xxxxx xxx tom rhce xx xxyyyy rhce yyyyy# N用法;把zz開頭的行和下一行中的rhce全部換成RHCAmoke@DESKTOP:~$ sed ‘/^zz/{N;s/rhce/RHCA/g}’ testzz xx tom xx tom RHCA xx rhce xx xx tom xx RHCA xx tom xxxx xx tom xx rhce xx xxxxx xxx tom rhce xx xxyyyy rhce yyyyy# G,h,d,用法moke@DESKTOP:/home$ cat tac1234# 用sed 倒序moke@DESKTOP:/home$ sed ‘1!G;h;$!d’ tac4321

Linux三劍客-sed

歡迎閱讀分享,歡迎交流