0809行編輯器sed

sed :Stream EDitor, 行編輯器

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

? 用法:

sed [option]… 'script' inputfile…

? 常用選項:

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

-e: 多點編輯sed -e 'script1' -e 'script2' … inputfile…先處理script1,后處理script2

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

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

-i: 原處編輯,直接操作源文件;

sed -i.bak '1,10d' f1    刪除f1原文件前創建f1.bak備份文件,然后再對源文件進行刪除等操作

?

 script:  '地址命令'

 地址定界:

(1) 不給地址:對全文進行處理:

    sed -n 'p' /etc/passwd     //等同于`cat /etc/passwd` 的結果,打印每一行文本,默認的模式空間要輸出的內容不輸出

    sed -n '2,6p' /etc/passwd         //只顯示2-6行的內容

(2) 單地址:

#: 指定的行

/pattern/:被此處模式所能夠匹配到的每一行

(3) 地址范圍:

#,#

#,+#  從#開始,到#+#行

/pat1/,/pat2/

#,/pat1/

(4) ~:步進

1~2 奇數行

2~2 偶數

s///:查找替換,支持使用其它分隔符, s@@@, s###

替換標記:

g: 行內全局替換

p: 顯示替換成功的行

w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

 編輯命令:

d: 刪除模式空間匹配的行

sed -n

p: 顯示模式空間中的內容

a\text:在行后面追加文本;支持使用\n實現多行追加

i\text:在行前面插入文本;支持使用\n實現多行插入

c\text:替換行為單行或多行文本

w /path/to/somefile: 保存模式匹配的行至指定文件

r /path/from/somefile:讀取指定文件的文本至模式空

間中匹配到的行后

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

!:模式空間中匹配行取反處理

實例:(以下命令均不改變原文件,除非加-i或者重定向至原文件)

? sed ‘/^$/d’ file        //刪除file文件中的空行,并講修改后的內容輸出至標準輸出

? sed ‘1,10d’ file        //刪除file文件中的1-10行字符串,并輸出至標準輸出

? nl /etc/passwd | sed ‘2,5d’       //刪除passwd文件中的2-5行

? nl /etc/passwd | sed ‘2a tea’    //在passwd的第二行下方(a)增加內容為'tea'的行;(i)則是在上方

? sed 's/test/mytest/g' example      //搜索文本example中含有'test'字符串的行,將'test'全部(g)替換為'mytest'

? sed –n‘s/root/&superman/p’ /etc/passwd     //在單詞root后插入superman

? sed –n‘s/root/superman&/p’ /etc/passwd     //在單詞root前插入superman

? sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets     //先執行將含有dog的行的第一個dog替換為cat,然后再講含有hi的行的第一個hi替換為lo

? sed –i.bak ‘s/dog/cat/g’ pets                //將pets文檔的中全部dog替換為cat,并保存在pets.bak文檔中

sed中除了有一個模式空間(pattern space),還有一個保持空間(hold space).

    保持空間,可將模式空間中處理完的字符串暫存至保存空間中,再處理下一行文本,或條用或追加輸出,或覆蓋輸出至保持空間,當所有行都處理完之后再選擇是否輸出,或保存.如果說模式空間相當于廚房的砧板,那么保持空間就相當于保鮮柜.

高級編輯命令:

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

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

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

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

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

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

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

d: 刪除模式空間中的行

D:刪除當前模式空間開端至\n的內容(不在傳至標準輸

出),放棄之后的命令,但是對剩余模式空間重新執行sed

例子

? sed -n 'n;p' FILE            //打印雙數行

? sed '1!G;h;$!d' FILE         //倒序

? sed '$!N;$!D' FILE           //顯示最后兩行或者一行

? sed '$!d' FILE               //顯示最后一行

? sed ‘G’ FILE               //每一行下方加一個空白行 

? sed ‘g’ FILE               //換空行

? sed ‘/^$/d;G’ FILE         //刪除(多個)空行,增加一個空行

? sed 'n;d' FILE               //打印單數行

? sed -n '1!G;h;$p' FILE       //倒序

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

(0)
hunterhunter
上一篇 2016-08-10 10:15
下一篇 2016-08-10 10:15

相關推薦

  • 第五周作業:find、cut、grep用法

    第五周作業 1、顯示當前系統上root、fedora或user1用戶的默認shell; 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); 3、使用echo命令輸出一個絕對路徑,使用grep取出其基名; 擴展:取出其路徑名  4、找出ifconfig命令結果中的1-255之間數字; …

    Linux干貨 2016-11-28
  • 基于kubernetes構建Docker集群管理詳解

    一、前言        Kubernetes 是Google開源的容器集群管理系統,基于Docker構建一個容器的調度服務,提供資源調度、均衡容災、服務注冊、動態擴縮容等功能套件,目前最新版本為0.6.2。本文介紹如何基于Centos7.0構建Kubernetes平臺,在正式介紹…

    2015-03-10
  • mysql—MHA原理與實現

    MHA 一:簡述MHA 1.1關于MHA MHA(Master HA)是一款開源的MySQL的高可用程序,它為MySQL主從復制架構提供了automating master failover 功能。MHA在監控到master節點故障時,會提升其中擁有最新數據的slave節點成為新的master節點,在此期間,MHA會通過與其它從節點獲取額外信息來避免一致性方…

    2016-11-27
  • 基于Corosync + Pacemaker+DRBD實現MySQL高可用集群

    前言 在眾多的高可用集群解決方案中,除了Heartbeat之外,Corosync也能提供類似于Heartbeat一樣的功能,而且目前RedHat官方提供的高可用集群解決方案的程序包都以Corosync為主,所以今后Corosync會逐漸取代Heartbeat。本文帶來的是基于Corosync + Pacemaker+DRBD的MySQL高可用集群解決方案。 …

    Linux干貨 2015-06-12
  • select基本用法和軟件包管理

    一、select語句     select語句在腳本中用于創建菜單,按數字順序排列的菜單項顯示在標準輸出上,并用PS3提示符,等待用戶輸入。用戶輸入菜單中的某個數字,執行相應的命令,并被保存在內置變量REPLY中。 用法:     select NAME [in WORDS &#…

    Linux干貨 2016-08-21
  • ntp時間服務器搭建實例

    ntp時間服務器采用stratum分級架構來處理時間同步;舉例說明:你搭建了一臺ntp服務器,然后同步的server為stratum-1,你的ntp則為stratum-2,你的下級ntp則為tratum-3。依此類推,最多為15層。 1.ntp server安裝: [root@localhost ~]# yum -y …

    Linux干貨 2015-11-10
欧美性久久久久