文本編輯器—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 09:01
下一篇 2016-08-12 09:01

相關推薦

  • LInux 網絡及相關進程作業管理

    馬哥教育網絡班23期+第四周課堂練習 Linux 網絡及相關進程作業管理 一、概述 1.1 簡介: 進入Linux學習第四周,這一周講的知識點非常的多,也特別的碎,感覺這一周的內容掌握起來有很大的難度,主要是要記的命令很多,包括yum 的一些安裝的命令,配置yum 源,相關的網絡的命令和參數,還有就是進程管理和作業管理中的相關工具的使用,最后還講了bash腳…

    Linux干貨 2016-10-24
  • M22 Centos6上編譯安裝httpd2.4并實現HTTPS瀏覽

    隨著網絡技術的發展,人們對信息安全越來越重視,傳統的http瀏覽互聯網的方式由于未經加密,其安全性廣為人們詬病,https協議作為加密的互聯網解決方案解決了這一問題。下面我就簡要說明下如何實現通過https發布web頁面的。   實驗目的: 模擬Centos6上安裝httpd2.4,并實現https加密訪問主頁 實驗器材: Centos6.8虛擬機…

    Linux干貨 2017-04-20
  • 任務計劃2

    [root@localhost app]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/root/bin MAILTO=root   # For details see man 4 crontabs   # Example of job defi…

    Linux干貨 2017-05-15
  • 第一周學習內容

    1、LINUX的三大主流版本:debian slackware redhat 2、一個完整的操作系統是由內核+運行在內核之上的應用程序組成。      LINUX操作系統是由linux內核+GNU開源組織編寫的應用程序組成(GNU/Linux) 3、CPU架構:X86(X64)、摩托羅拉的m68k、arm、IBM的POWER(性…

    Linux干貨 2016-12-03
  • 使用sudo對用戶進行權限管理

    使用sudo對用戶進行權限管理 因為root用戶權限太大,一般在實際應用的時候 ,為了避免造成錯誤泛濫和找不到責任人都需要對使用服務器人員進行權限分配,除了系統管理員外,其他人禁止使用root,但可以通過sudo命令,給自己提權。同時通過日志審計進行監控操作,操作如下: 1.禁止普通用戶使用su命令到root # usermod -g wheel user0…

    Linux干貨 2017-03-26
  • 國際標準OSI七層模型和事實標準TCP/IP四層模型

    我們知道,標準分為三種:國際標準、國家標準和事實標準。那我們學習的兩個重要模型:OSI和TCP/IP模型分別屬于國際標準和事實標準,接下來我們來總結一下兩種模型的分層及功能還有異同: 一:國際標準OSI模型 OSI:(Open System Interconnect) 開放系統互連,總共分為七層,從下到上順序為:物理層(physical)、數據鏈路層(dat…

    2017-09-02

評論列表(1條)

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

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

欧美性久久久久