sed的詳細用法

sed(Stream EDitor)是一款流編輯器,用來對文本進行過濾與替換操作。其原理是:通過文件或管道讀取文件內容,但是sed默認并不直接修改源文件,而是一次僅讀取文件的一行至模式空間(pattern space)根據sed指令進行編輯并輸出結果后清除模式空間,即所有的操作都是在模式空間中進行的。

sed工作流程.png

語法格式

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

OPTIONS

-n,--quite,--silent:靜默輸出,即不輸出模式中的內容至輸出
-e script:使用多個腳本指令執行編輯
-f /PATH/TO/SCRIPT_FILE:從指定的文件中讀取編輯腳本
-r:支持在腳本中使用正則表達式
-i,--in-place:直接在文件原處執行編輯,即修改源文件

SCRIPT,地址+編輯指令

地址定界

(1) 不給地址:對全文進行處理;
(2) 單地址
    #:指定的行
    $:文件的最后一行
    /PATTERN/:被模式匹配到的每一行
(3) 地址范圍
    m,n:指定m行到n行
    #,+n:指定#行到#+n行
    /pat1/,/pat2/:匹配到的pat1到pat2之間的行
    #,/pat/:第#行到匹配到pat
(4) 步進:~
注意:如果//中正則表達式為空,則匹配最近一次正則表達式的匹配地址!

編輯命令

d:刪除
p:顯示模式空間的內容
a [\]text:在行后面追加內容,支持使用\n(換行符)實現多行追加
i [\]text:在行前面插入內容,支持使用\n(換行符)實現多行追加
c [\]text:替換行為單行或多行文本,支持使用\n(換行符)
w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定文件中
r /PATH/FROM/SOMEFILE:讀取指定文件的文本流至模式空間中匹配到的行的行后
=:為模式空間中的行打印行號
!:取反條件
s/pattern/replacement/flags:替換,支持使用其他分隔符,如:s@@@, s###
    替換標記(flags):
        #:替換行內匹配到的第#次的內容
        g:行內全局替換
        p:顯示替換成功的行
        w /PATH/TO/SOMEFILE:將替換后的結果保存至指定文件
    replacement:
        &:用pattern匹配到的內容進行替換
        \n:在pattern中使用\(\)指定時,匹配第n個子串

示例

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

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

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

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

3、echo一個絕對路徑給sed命令,取出其基名;進一步的,取出其目錄名;

# echo "/tmp/test/fstab" | sed 's/[^/]\+\/\?$//'

基于sed腳本文件進行文本處理

用法

sed -f SCRIPT_FILE FILE

SCRIPT_FILE

address{
command1
command2
...
}
命令使用花括號進行組合,使命令序列作用于同一個地址。另外,第一個命令可以和左花括號在同一行,但右花括號必須單獨處于一行。并且,命令后添加空格會產生錯誤。

sed的高級應用

除了存放當前輸入行緩沖區的模式空間,sed還有一個保持空間(hold space)的緩沖區。模式空間的內容可以復制到保持空間,保持空間的內容也可以復制到模式空間。

高級編輯命令

h:把模式空間中的內容覆蓋至保持空間
H:把模式空間中的內容追加至保持空間
g:從保持空間取出數據覆蓋至模式空間
G:從保持空間取出數據追加至模式空間
x:把模式空間中的內容與保持空間中的內容進行互換
n:讀取匹配到的行的下一行至模式空間
N:追加匹配到的行的下一行至模式空間
d:刪除模式空間中的行
D:刪除多行模式空間中的所有行

常用高級命令

sed -n 'n;p' FILE:顯示偶數行
sed '1!G;h;$!d' FILE:逆向顯示文件內容
sed '$!N;$!D' FILE: 取出文件后兩行;
sed '$!d' FILE:取出文件最后一行;
sed 'G' FILE: 
sed '/^$/d;G' FILE: 
sed 'n;d' FILE: 顯示奇數行;
sed -n '1!G;h;$p' FILE: 逆向顯示文件中的每一行;

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

(0)
JeasonJeason
上一篇 2016-11-14
下一篇 2016-11-14

相關推薦

  • 于浩的第一篇隨筆

    人生只有兩件事,努力工作,享受生活!

    2018-03-26
  • 初學Linux之文本處理工具和正則表達

    1、各種文本工具來查看、分析、統計文本 ?
    2、grep ?
    3、正則表達式和擴展正則表達式 ?
    4、egrep

    2017-12-09
  • linux時間

    linux有兩個時間:     系統時間和硬件時間 系統時間: 最簡單的使用date命令顯示當前系統的時間,命令行輸入date。 # date Thu Jun  2 17:11:48 CST 2016 date的具體使用方式:     1. date格式顯示:date …

    Linux干貨 2016-06-03
  • 文件查找(Find和Locate)常用用法及摩根定律趣解(重要)

    文件查找(Find和Locate)常用用法及摩根定律趣解(重要) 摩根定律: 非(A 且 B)=(非 A)或(非 B) 非(A 或 B)=(非 A)且(非 B) 這樣看起來不是很好理解下面通過一些列圖片給大家展示; 圖(1)  圖(2)  圖二中的黑色就A且B,A且B的反面三種情況(如圖1)即為(非A)或(非B)。因此…

    Linux干貨 2016-08-21
  • 學習宣言

    沒有學不會的技術,只有不勤奮的人!

    Linux干貨 2016-12-28
  • Centos6上安裝cobbler及cobbler常見參數詳解

    前言 Cobbler是一個自動化和簡化系統安裝的工具,通過使用網絡引導來控制和啟動安裝。Cobbler的特性包括存儲庫鏡像、Kickstart模板和連接電源管理系統。使用Cobbler之前需要先了解下PXE和Kickstart的基本原理,文章包含了Cobbler工作原理和Cobbler部署實踐兩部分內容,交叉關聯性的內容還是蠻多的,遇到報錯也不要怕,都會一步…

    Linux干貨 2016-11-11
欧美性久久久久