文本編輯器—sed

一、sed介紹

sed 一種流式編輯器。一個流式編輯器通常對來自輸入流(一個文件或者是管道的輸入)的文本進行轉換處理。在某些方面類似支持腳本編輯的編輯器,sed在多輸入情況下只開放一個通道工作,因此更加效率。sed與其他編輯器最大的區別在于,能對管道輸入的文本進行過濾處理。

二、sed工作機制

sed保持兩個數據緩沖區:主要活動的模式空間,以及輔助性的保持空間。兩者初始狀態都為空。

sed以對輸入的每一行文本執行下列循環操作的方式來運作:首先,sed從輸入流讀取一行數據,移走任何后面的換行符【注】,將讀取的一行放入模式空間。然后執行命令;每一條命令可以關聯一個地址:這些地址是一種條件碼,一條命令執行之前先確認條件是否符合才會被sed執行。

當執行完腳本末行命令時,如果沒有啟用 -n選項,打印模式空間里的文本到輸出流,在后面加上移走的換行符。然后讀取下一輸入行循環處理。所以sed在默認情況下不會對原文件改動。

如果沒有特別指令(比如'D')說明,在下一個循環開始前刪除模式空間的內容。而保持空間則可以保存循環之間的數據。

[注]:當有新內容追加到模式空間時,自動添加換行符

三、sed基本用法

用法:sed [OPTIONS…] 'scripts' FILE…

1.如何選定指定的行

sed中有一些指定行范圍的方法,用行號指定和用正則表達式指定,以及兩者結合起來指定。

  1. 空地址

    匹配所有行;

  2. N

    匹配輸入中第N行;

  3. $

    匹配最后一行;

  4. /PATTERN/,\#PATTERN#

    匹配符合正則表達式的行;

  5. /PATTERN/I

  正則匹配時忽略大小寫

指定范圍表達方式

  1. N1,N2

    匹配N1到N2之間的行

  2. 0,/PATTERN/

    從第一行開始匹配,直到符合正則表達式的那行

  3. /PATTERN1/,/PATTERN2/

    匹配符合兩正則表達式之間的行

  4. FIRST~STEP

    步進,匹配FISRT+n*STEP行,n為自然數。比如,1~2表示匹配奇數行


2.sed命令常用選項

選項 說明
-n 取消模式空間內容的自動打印
-e 多點編輯
-f 指定腳步文件
-r 支持擴展正則表達式
-i 原文件編輯(慎用)

3.sed編輯命令

1)d

刪除當前模式空間內容,立即開始下一循環(不打印任何內容)

~]$ sed '1,10d' test.txt          #打印除1到10行外的內容

2)p

打印模式空間的內容;常與-n選項公用

~]$ sed -n '1~2p' test.txt        #打印奇數行的內容

3)a \text

行后追加text文本;另起的一行

4)i \text

行前插入text文本;另起的一行

5)c \text

指定行替換為text文本

6)w /path/file

保存模式空間中的內容到指定文件

7)r /path/file

讀取文件內容到模式空間

8)=

為模式空間中的行打印行號

9)!

標記在地址后邊,表示地址取反

~]$ sed -n '1!p' text.txt        #除第一行外全部打印

4.替換命令

s/REGEXP/REPLACEMENT/FLAGS

表達式中'/'可用其他單個字符替換

(一)REPLACEMENT中有特殊字符,代表特殊意義

1)&

表示查找到的內容

~]$ sed 's/.*/#&/' test.txt             #為每一行開頭加上#

2)\L

將替換的內容都轉換成小寫字母,直到遇到U或者E。

3)\l

將下一個字符轉換成小寫字母。

4)\U

將替換的內容都轉換成大寫字母,直到遇到L或者E。

5)\u

將下一個字符轉換成大寫字母。

6)\E

停止L或者U的字母大小寫轉換。

(二)FLAGS

1)g

表示全行替換;默認只替換第一個匹配項

2)p

打印替換成功的行

3)w /path/file

保存替換成功的行到指定文件

例1,將/etc/fstab 文件中UUID轉為小寫,UUID行其他字母轉為大寫

$ sed -r 's/(^U.*)=(.*)/\L\1=\U\2/' /etc/fstab

QQ圖片20160811195700.png

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

$ sed -r 's/^#[[:space:]]+//' /etc/fstab

QQ截圖20160811200737.png

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

(0)
cutemsyucutemsyu
上一篇 2016-08-12
下一篇 2016-08-12

相關推薦

  • 字符串處理

      一.字符串處理 v bash 的字符串處理工具: (一)字符串切片: ${#var}: 返回字符串變量var 的長度 例: [root@lxc ~]# a="     " [root@lxc ~]# echo ${#a} 5 [root@lxc ~]# ${var:offse…

    Linux干貨 2016-11-24
  • Linux Zabbix監控

                           Linux Zabbix監控 zabbix監控系統:    zabbix是基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。zab…

    Linux干貨 2016-11-19
  • bash腳本之練習

    1、編寫服務腳本/root/bin/testsrv.sh,完成如下要求  (1) 腳本可接受參數:start, stop, restart, status  (2) 如果參數非此四者之一,提示使用格式后報錯退出 (3) 如是start:則創建/var/lock/subsys/SCRIPTNAME, 并顯示“啟動成功” 考慮:如果事先已經啟…

    Linux干貨 2016-08-24
  • Homework Week-10 CentOS啟動相關及bash腳本編程

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;   (1) 為硬盤新建兩個主分區;并為其安裝grub;   (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;   (3) 為rootfs提供…

    Linux干貨 2016-10-24
  • 馬哥教育網絡班21期+第7周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;(2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@itop ~]# fdisk /dev/sda&nbsp…

    Linux干貨 2016-08-30
  • Linux系統文本處理

                                           Linux系統文本處理工具        …

    Linux干貨 2016-08-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-12 10:11

    文章從sed原理到常見用法,有理論有實踐,排版也很精美,建議對大標題使用字體加粗會更好一點哦。

欧美性久久久久