Linux三劍客之sed

 Sed簡介  

    sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處 理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有 改變,除非你使用重定向存儲輸 出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。 

 定址  

    可以通過定址來定位你所希望編輯的行,該地址用數字構成,用逗號分隔的兩個行數表示以這兩行為起止的行的范圍(包括行數表示的那兩行)。如1,3表示1,2,3行 ,美元符號($)表示最后一行 ,1~2表示奇數行,1~2表示偶數行。范圍可以通過數據,正則表達式或者二者結合的方式確定 。  


sed命令

利用script處理文本文件

語法

sed [OPTION]… {script-only-if-no-other-script} [input-file]…

常用選項

-n:不輸出模式空間內容的自動打印

-e: 多點編輯

-f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本

-r: 支持使用擴展正則表達式

-i: 原處編輯(慎用)

script

調用sed命令有兩種形式:  

a\  在當前行后面加入一行文本。

d   從模板塊(Pattern space)位置刪除行。

i\  在當前行上面插入文本。

c\  用新的文本改變本行的文本。 

p   打印模板塊的行。

r   file 從file中讀行

w   file 寫并追加模板塊到file末尾。

!   表示后面的命令對所有沒有被選定的行發生作用。(取反)

=   打印當前行號碼。

s/re/string 用string替換正則表達式re。

g   表示行內全面替換。

p   表示打印行。

w   表示把行寫入一個文件。

&   保存搜索字符用來替換其他字符,如s/love/**&**/,love這成**love**。


示例

sed '2d' test #刪除test文件的第二行

sed '2,$d'test #刪除文件的第二行到末尾所有行

sed '$d' file #刪除文件file的最后一行

sed '/text/d' text #刪除帶有text的行

sed -n 's/system/config/gp' test #把system替換為config,只顯示被匹配到的行,g使行內多個符合匹配都能匹配(默認匹配沒行的第一個)

sed -n 's/\(love\)ly/\1er/pg' test  #把所有的lovely替換為loveer,且打印出來 

sed -n 's@192.168.1.1@myipis&@p' test #把192.168.1.1都會替換成為myipis192.168.1.1。緊隨s的符號都被認為是分隔符,所以@在這里就是分隔符

sed -e '1,2d' -e 's#haha#laugh#' test #允許在同一行里執行多條命令。如例子里第一條命令刪除1至2行,第二條命令用laugh替換haha。

1、刪除/etc/grub.conf文件中所有以空白開頭的行行首的空白字符

 sed 's#^[[:space:]]\+##' /etc/grub.conf

2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符

 sed  's@^#[[:space:]]\+@@' /etc/fstab

3、在/root/install.log每一行行首增加#號

  sed 's@^@&#@' /root/install.log

4、在/etc/fstab文件中不以#開頭的行的行首增加#號

  sed 's@[^#]@#@' /etc/fstab

5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名

  echo '/etc/fstab' | sed -r 's#(.*/)([^/]+/?)#\1#'

  echo '/etc/fstab' | sed -r 's#(.*/)([^/]+/?)#\2#'

6、利用sed 取出ifconfig命令中本機的IPv4地址

  ifconfig|sed  -n '/inet addr/p' |tr  -s ':' ' '|cut -d' ' -f4

7、統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個字段的重復次數

  ls /media/Package |sed -r 's@.*\.(.*)\.rpm$@\1@'|sort|uniq -c


sed命令的高級用法

高級編輯命令:

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

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

g: 從保持空間取出數據覆蓋至模式空間

G:從保持空間取出內容追加至模式空間

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

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

N:追加匹配到的行的下一行至模式空間

d: 刪除模式空間中的行

D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

示例

[root@localhost /]# cat passwd #測試文件
     1wang:x:507:507::/home/wang:/bin/bash
     2mage:x:508:508::/home/mage:/bin/bash
     3uuuu:x:509:509:/bin/bash:/home/uuuu:/bin/bash
     4fedora:x:510:510::/home/fedora:/bin/bash
     5user1:x:511:511::/home/user1:/bin/bash
     61100:x:1100:1100::/home/1100:/bin/bash
     7499:x:495:1101::/home/499:/bin/bash
     81999:x:1999:1999::/home/1999:/bin/bash
     91820:x:1500:1500::/home/1820:/bin/bash
    10GLLL:x:2000:2000::/home/GLLL:/bin/bash
[root@localhost /]# sed -n 'n;p' passwd #僅顯示偶數行
     2mage:x:508:508::/home/mage:/bin/bash
     4fedora:x:510:510::/home/fedora:/bin/bash
     61100:x:1100:1100::/home/1100:/bin/bash
     81999:x:1999:1999::/home/1999:/bin/bash
     10GLLL:x:2000:2000::/home/GLLL:/bin/bash
[root@localhost /]# sed '1!G;h;$!d' passwd #倒序顯示
     10GLLL:x:2000:2000::/home/GLLL:/bin/bash
     91820:x:1500:1500::/home/1820:/bin/bash
     81999:x:1999:1999::/home/1999:/bin/bash
     7499:x:495:1101::/home/499:/bin/bash
     61100:x:1100:1100::/home/1100:/bin/bash
     5user1:x:511:511::/home/user1:/bin/bash
     4fedora:x:510:510::/home/fedora:/bin/bash
     3uuuu:x:509:509:/bin/bash:/home/uuuu:/bin/bash
     2mage:x:508:508::/home/mage:/bin/bash
     1wang:x:507:507::/home/wang:/bin/bash
[root@localhost /]# sed '$!N;$!D' passwd #僅顯示最后兩行
     91820:x:1500:1500::/home/1820:/bin/bash
    10GLLL:x:2000:2000::/home/GLLL:/bin/bash
[root@localhost /]# sed '$!d' passwd #顯示最后一行
    10GLLL:x:2000:2000::/home/GLLL:/bin/bash

原創文章,作者:ladsdm,如若轉載,請注明出處:http://www.www58058.com/33960

(0)
ladsdmladsdm
上一篇 2016-08-12 14:45
下一篇 2016-08-12 16:06

相關推薦

  • Yellow Dog! COMMAND && source

    linux程序包管理之yum        yum:之前命名為:yellow dog ,后來因為及其好用,很多發行版都以此為默認rpm程序前端管理工具,故此更名為:yellowdog update modifier,更牛的還有一個基于redhat的二次發行版也叫yellow dog 功能:…

    Linux干貨 2016-08-21
  • week6

    1、請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白 字符開頭的行的行首加#; :%s@^[[:space:]]\+[^[:space:]]@#&@g 2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/…

    Linux干貨 2016-12-02
  • 馬哥教育首屆IT技術博客大賽–結果揭曉

    號外、號外?。●R哥教育首屆博客大賽已圓滿結束。感謝小伙伴們的積極參與! 噼里啪啦,小伙伴們掌聲響起來,啤酒烤鴨high起來~~咳咳,跑題了,小編好像忘了一件很重要的事: 馬幫博客大賽就是與眾不同,全銀河系也就僅此一家,為啥這么說呢,您看啊,咱就喜歡原創,鼓勵原創,酷愛原創,以原創博客作為技術交流的平臺供大家隨意圍觀和吐槽,您看看,除了馬哥這里,哪里還有這么自…

    Linux干貨 2016-06-22
  • N25-第5周作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行 [root@jizo ~]# grep -E '^[[:space:]]+.*' /boot/grub/gurb.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,…

    Linux干貨 2017-01-09
  • GOPS2017全球運維大會 ? 深圳站將在深圳召開!

    第六屆GOPS2017全球運維大會(本次)將于2017年4月21日-22日在深圳舉行,歷屆金牌講師精選亮相,各種精彩等您發掘。活動家為GOPS2017全球運維大會提供在線報名!在線報名地址:https://www.huodongjia.com/event-231365274.html 大會亮點 眾多國外重量級嘉賓在路上 ? 目前正在和各位大咖商榷行程中,主會…

    2017-04-10
  • linux軟件包安裝與管理

    一、RPM包簡介     linux之所以那么強大,除了linux強大的內核,還有很大一部分取決于linux的軟件包,假想沒有軟件包,就一個內核在運行,人類需要和內核打交道是多么痛苦,但是聰明的人類發明了bash,通過bash,人就可以使用高級語言,和機器溝通,這其中的bash起始也是一個軟件包,當然linux除了ba…

    Linux干貨 2016-08-24
欧美性久久久久