Linux文本處理三劍客之sed

處理文本工具sed

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

用法:

   sed[option]... 'script' inputfile...

常用選項:

   -n:不輸出模式空間內容的自動打印
   -e:多點編輯
   -f /PATH/TO/SCRIPT_FILE:從指定文件中讀取編輯腳本
   -r:支持使用擴展正則表達式
   -i:原處編輯

地址命令:

地址定界:

   (1)不給地址:對全文進行處理
   (2)單地址:
           #:指定的行
           /pattern/:被此模式所能匹配到的每一行
   (3)地址范圍:
           #,#
           #,+#
           /pat1/,/pat2/
           #,/pat1/
   (4)~:步進
           1~2 奇數行
           2~2 偶數行

編輯命令:

    d:刪除模式空間匹配的行
    p:顯示模式空間中的內容
    a \text:在行后面追加文本;指出使用\n實現多行追加
    i \text:在行后前面追加文本;指出使用\n實現多行插入
    c \text:替換行為單行或多行文本
    w /path/to/somefile:保存模式空間的行至指定文件
    r /path/to/somefile:讀取指定文件的文本至模式空間中匹配到的行后
    =:為模式空間中的行打印行號
    !:模式空間中匹配行取反處理

替換命令:

    s///:查找替換,支持使用其他分隔符,s@@@,s###
        sed 's/要被替換的字符串/新的字符串'
    替換標記:
        g:行內全部替換
        p:顯示替換成功的行
        w /PATH/TO/DOMEFILE:將替換成功的行保存至文件中

sed示例:

     使用-n的時候將只打印包含模板的行

    [root@centos7 ~]# sed -n '2p' /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin

     把/etc/passwd下1到4行取出

    [root@centos7 ~]# sed -n '2,4p' /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

      先取空白行再取空白行的行號,-e是多點編輯

    [root@centos7 ~]# sed -n -e '/^$/p' -e '/^$/=' /etc/rc.d/init.d/functions 

    6

    8

    11

    15

    在匹配到root字符行的下方添加superman

    [root@centos7 ~]# sed '/root/a\superman' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    superman
    bin:x:1:1:bin:/bin:/sbin/nologin

    匹配到的root字符的行被superman替代   

    [root@centos7 ~]# sed '/root/c\superman' /etc/passwd
    superman
    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

    把/etc/passwd中的2到5行刪除

    [root@centos7 ~]# nl /etc/passwd | sed '2,5d'
     1	root:x:0:0:root:/root:/bin/bash
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

    “&”引用前面查找時查找到的整個內容

    [root@centos7 ~]# sed -n 's/root/&superman/p' /etc/passwd
    rootsuperman:x:0:0:root:/root:/bin/bash
    [root@centos7 ~]# sed -n 's/root/superman&/p' /etc/passwd
    supermanroot:x:0:0:root:/root:/bin/bash

    -i可以直接修改文件的內容(危險操作)

    [root@centos7 ~]# nl /etc/passwd > f1
    [root@centos7 ~]# sed -i '2d' f1
    [root@centos7 ~]# cat f1
     1root:x:0:0:root:/root:/bin/bash
     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

刪除f1第二行之前先做個備份命名為f1.bak

    [root@centos7 ~]# sed -i.bak '2d' f1

sed練習:

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

    cat /etc/grub2.cfg| sed 's@^[[:space:]]\+@@g'

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

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

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

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

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

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

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

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

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

    ifconfig | sed -n '2p' | sed -r 's@.*addr:(.*) B.*@\1@'

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

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

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

(0)
xiaoqingxiaoqing
上一篇 2016-08-15 09:25
下一篇 2016-08-15 09:25

相關推薦

  • linux 記憶命令心得

    新開始學linux,要記住很多的命令,畢竟這是linux的根本,沒有這些命令,連操作都沒辦法進行。所以我寫這個的目的是我自己記憶,也是想幫助一下一同學習linux的同學們,提供自己記憶這些的方法,拋磚引玉,大家共同討論一下。 我的記憶方法就是分類,把命令分成輸出類,名詞累,操作類。 輸出類就是說的例如w,who,whoami,echo,ifcogfig,wh…

    Linux干貨 2017-07-15
  • 10分鐘學會理解和解決MySQL亂碼問題

    本文將詳細介紹MySQL亂碼的成因和具體的解決方案。在閱讀本文之前,強烈建議對字符集編碼概念還比較模糊的同學 閱讀下博主之前對相關概念的一篇科普:十分鐘搞清字符集和字符編碼 MySQL出現亂碼的原因 要了解為什么會出現亂碼,我們就先要理解:從客戶端發起請求,到MySQL存儲數據,再到下次從表取回客戶端的過程中,哪些環節會有編碼/解碼的行為。為了更好的解釋這個…

    2015-03-17
  • 認識shell

    一、認識shell 什么是shell?shell為單詞外殼的意思。那么這是誰的外殼?我們知道一個系統中實際工作的是那些硬件,cpu、內存、磁盤等。我們如何調用這些硬件為我們工作?實際上,硬件是由內核kernel控制的。我們可以通過kernel控制硬件,但我們不能直接和內核kernel交流。我們需要一個外殼,這個外殼就是shell來溝通kernel。何為she…

    Linux干貨 2015-09-22
  • 文本三劍客之grep

    文本編輯三劍客之grep 目錄 一、正則表達式 二、grep:文本過濾器 一、正則表達式 REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面上的意義,而表示控制或者通配的功能。分類: 基本正則表達式:BRE 擴展正則表達式:ERE 元字符的分類: 字符匹配 匹配次數 位置錨定 分組 (1)基本正則表達式元字符 1>…

    2017-03-26
  • SSH——安全的通信

    SSH ·ssh:secure shell, protocol, 22/tcp,  安全的遠程登錄 ·OpenSSH:ssh協議的開源實現 ·dropbear:另一個開源實現 ·SSH協議版本:          v1:基于CRC-32做MAC,不安全;man-in-m…

    Linux干貨 2016-09-25
  • IO模型——進程工作的方式

    I/O模型 模型:阻塞型、非阻塞型、復用型、信號驅動型、異步 同步/異步: 關注消息通知機制      消息通知:          同步:等待對方返回消息       &nbsp…

    Linux干貨 2016-10-25
欧美性久久久久