sed總結

[-]正則表達式

  1. 簡介
  2. 調用方式
  3. 選項
  4. 命令集合
  5. 尋址方式
  6. 基本用法
  7. 文件操做
  8. 附加-插入-修改文本
  9. 刪除文本
  10. 替換文本
  11. 轉換文本
  12. 補充

--------------------------------------------express

簡介

簡介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />緩存

一個「非交互式的」字符流編輯器(stream editor)app

Sed是一非交互性文本編輯器,它編輯文件或標準輸入導出的文本拷貝,標準輸入可能來自鍵盤、文件、重定向、字符串、變量或一管道文件編輯器

 

sed主要用來自動編輯一個或多個文件(替換、插入、刪除、追加、更改……);簡化對文件的反覆操做;編寫轉換程序等ui

 

【對進入的數據進行全局的處理,增長,刪除,修改某些部分,得出結果】spa

處理過程.net

1.處理時,把當前處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space)命令行

2.接着用sed命令處理緩衝區中的內容,翻譯

3.處理完成後,把緩衝區的內容送往屏幕。

4.接着處理下一行或多行,這樣不斷重複,直到文件末尾

 

文件內容並無改變,除非你使用重定向或寫入命令存儲輸出

主要做用:

  1. 抽取域
  2. 匹配正則表達式
  3. 比較域
  4. 增長、附加、替換

 

 

調用方式

調用方式:

  1. 命令行輸入

sed [options] 'command' file(s)

  1. 使用sed腳本

sed [options] -f scriptfile file(s)

  1. 使sed腳本可執行

在腳本第一行具備sed命令解釋器

Sed腳本文件 [選項]輸入文件

sed–f sedScriptFile targetFile

 

選項

選項:

-n

--quiet, --silent 取消默認輸出

不打印,不寫編輯行到標準輸出,缺省狀況下打印全部行[編輯/未編

輯]p命令能夠打印編輯行

-f

調用sed腳本sed –f sedScriptFile targetFile

-c

下一命令是編輯命令,使用多項編輯時加入此選項

-e command

--expression=command   容許多條編輯命令

-h

--help打印幫助,並顯示bug列表的地址

-V

--version 打印版本和版權信息

 

命令集合

命令集合:

a\

定位行號後附加新文本信息 append

b lable

分支到腳本中帶有標記的地方,若是分支不存在則分支到腳本的末尾

c\

用新的文本改變本行的文本,用新文本替換定位文本  change

d

從模板塊(Pattern space)位置刪除行  刪除定位行  delete

D

刪除模板塊的第一行

i\

定位行號後插入  insert

h

拷貝模板塊的內容到內存中的緩衝區

H

追加模板塊的內容到內存中的緩衝區

g

得到內存緩衝區的內容,並替代當前模板塊中的文本

得到內存緩衝區的內容,並追加到當前模板塊文本的後面

l

列表不能打印字符的清單 將非打印字符顯示爲兩個數字的ASCII代碼

n

讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令

追加下一個輸入行到模板塊後面並在兩者間嵌入一個新行,改變當前行號碼

打印匹配行 print

P(大寫)

打印模板塊的第一行

退出Sed  第一個模式匹配完成後退出或當即退出

r file

從file中讀行  從另外一個文件中讀文本 read

t label 

if分支,從最後一行開始,條件一旦知足或者T,t命令,將致使分支到帶有標號的命令處,或者到腳本的末尾

T label

錯誤分支,從最後一行開始,一旦發生錯誤或者T,t命令,將致使分支到帶有標號的命令處,或者到腳本的末尾

w file

寫並追加模板塊到file末尾 寫文本到一個文件  write

W file

寫並追加模板塊的第一行到file末尾

y

傳送字符

!

表示後面的命令對全部沒有被選定的行發生做用

s/re/string 

用string替換正則表達式re  使用替換模式替換相應模式

=

打印匹配行行號

把註釋擴展到下一個換行符之前

{}

定位執行命令組

替換標記

1)g表示行內全面替換。   

2)p表示打印行。   

3)w表示把行寫入一個文件。   

4)x表示互換模板塊中的文本和緩衝區中的文本。   

5)y表示把一個字符翻譯爲另外的字符(可是不用於正則表達式)

 

尋址方式

尋址:

sed命令能夠指定零個、一個或兩個地址。每一個地址都是一個描述模式、行號、或者行尋址

符號的正則表達式。

若是沒有指定地址,那麼命令將應用於每一行。

若是隻有一個地址,那麼命令將應用於與這個地址匹配的任意行。

若是指定了由逗號分隔的兩個地址,那麼命令應用於匹配第一個地址的第一行和他後面的

行,直到匹配第二個地址的行(包括此行)。

 

若是地址後面跟有感嘆號(!),那麼命令就應用於不匹配該地址的全部的行。

定位命令

x

行x

X,y

行x到行y

/pattern/

模式

/pattern/pattern/

兩個模式

/pattern/,x

 

模式+行【在給定行號上查詢模式】

X,y /pattern/

經過行號和模式查詢匹配行

X,y!

不包含指定行號

 

基本用法

示例:[dream爲數據文件]

基本用法——匹配&打印

  1. 顯示第二行

$sed –n ‘2p’ dream

  1. 顯示一到三行

$sed –n ‘1,3p’ dream

  1. 匹配模式

$sed –n ‘/dreamb/’p dream

  1. 使用模式和行號進行匹配

$sed –n ‘4,/The/’p dream

【只能加一個行號,不能變爲區間】

  1. 打印匹配行行號

$sed –n ‘/dream/=’ dream

  1. 匹配元字符

$sed –n ‘/\$/’p dream

  1. 顯示整個文件

$sed –n ‘1,$p’ dream

  1. 匹配字符串

$sed –n ‘/.*ing/’p dream

  1. 首行

$sed –n ‘1p’ dream

10.行號打印

$sed –e ‘/music/=’ quote.txt  整個文件並打印匹配行號

$sed –n ‘/music/=’ quote.txt  只打印匹配行號

sed –n 「/^title/p」 auction.xml#精確匹配以title開頭,打印此行

sed -n "/pict/,5p" auction.xml #指定具體行匹配

sed –n 「/\<doc\>/p」 auction.xml #匹配正則表達式

sed –n 「/.*is/p」 auction.xml#匹配任意字母

sed -n -e "/^title/p" -e "/^title/=" auction.xml #打印行號及匹配行

 

文件操做

文件讀入寫出

 

讀取文件:r命令

$ sed '/test/r file' example

file裏的內容被讀進來,顯示在與test匹配的行後面,若是匹配多行,則file的內容將顯示在全部匹配行的下面。   

 

寫入文件:w命令   可使用重定向

$ sed -n '/test/w file' example

在example中全部包含test的行都被寫入file裏

 

注: 在命令和文件名之間必須有一個空格。每一個腳本最多隻能打開10個文件

 

附加-插入-修改文本

附加/插入/修改文本

使用符號a\,能夠將指定文本一行或多行附加到指定行,若不指定放置位置,默認放入第一行。

注:附加操做,結果到標準輸出,不能被編輯,必須存到另外一個文件,再運行一個sed編輯

插入文本 i\   修改文本 c\

 

  1. 匹配行後插入一行

$sed ‘/dreamb/a\」appended line」’ dream

【會自動換行】

  1. 插入文本

$sed ‘2 i\ 「inserted line」’ dream

【在第二行以前加一行】

sed "/user/ i\test" auction.xml

在匹配行前插入test

  1. 修改文本

$sed ‘3 c\ 「changed line」’ dream

【整行替換掉】

【注:能夠用行,/正則/搞定】

 

刪除文本

刪除文本

命令格式:  [address[,address]] d

  1. 刪除行

$sed ‘1d’ dream

$sed ‘1,3d’ dream

$ sed '2,$d' example  #第二行到末尾全部行

$ sed '$d' example-----刪除example文件的最後一行

  1. 刪除匹配行

$sed ‘/dreamb/d’ dream

    $sed –n ‘/BEGIN/,/END/d’ myfile

 

替換文本

替換文本

格式:[address[,address]]s/pattern-find/replacement-pattern/[g,p,w,n]

n   1到512之間的一個數字,表示對本模式中指定模式第n次出現的狀況進行替換。

g   對模式空間全部出現的狀況進行全局更改【缺省只替換首次出現的模式 】

p   打印模式空間的內容

w   file

  1. 替換

$sed ‘s/dreamb/DREAMB’ dream

【問題:這裏是如何執行的?報錯】

  1. 全局替換

$sed ‘s/The/Wow!/g’ dream

  1. 替換後重定向到文本

$sed ‘s/dreamb/Dream/w sed.out’ dream

【只輸出替換行】

  1. 讀取部分寫入另外一個文件

$sed ‘1,2 w filedt’ dream

$sed ‘/dream/ w filedt’ dream

【注: 在命令和文件名之間必須有一個空格。每一個腳本最多隻能打開10個文件。】

  1. 首次匹配後退出

$sed ‘/dream/q’ dream

【遇到匹配以前的內容仍是要輸出的】

  1. 顯示文件中的控制字符

格式: [ address[,address]]l

$sed –n ‘1,$l’ dream  【小寫字母l】

  1. 去除行首數字

$sed ‘s/^[0-9]//g’ dream

  1. Shell向sed傳值

$NAME=」go there」

$REP=」GO」

$echo $NAME | sed 「s/go/$REP/g」      這裏必須雙引號【此時sed單引號不被解析】

  1. 使用替換修改字符串(title前面加test)(注意和附件文本不要混淆)

sed -n "s/^title/test &/p" auction.xml

  1. $ sed 's#10#100#g' example

不論什麼字符,緊跟着s命令的都被認爲是新的分隔符,因此,「#」在這裏是分隔符,代替了默認的「/」分隔符。表示把全部10替換成100

  1. $ sed 's/^192.168.0.1/&localhost/' example

&符號表示替換換字符串中被找到的部份。全部以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost

 

轉換文本

轉換文本

語法: [address]y/abc/xyz/

功能:字母表式的轉換

eg1

$ cat test.txt

1 cow

2 cow

3 pig

4 cow

$ sed 'y/cp/wd/' test.txt

1 wow

2 wow

3 dig

4 wow

(c轉換成w,p轉換成d)

 

eg2

$ sed '1,10y/abcde/ABCDE/' example

把1--10行內全部abcde轉變爲大寫,注意,正則表達式元字符不能使用這個命令

 

補充

sed補充:

分組

sed 使用大括號「{}」將一個地址嵌套在另外一個地址中,或者在相同的地址上應用多個命令。

 

左大括號必須在行末,並且右大括號自己必須單獨佔一行。要確保在大括號以後沒有空格。

可使用大括號將編輯命令括起來以對某個範圍的行應用多個命令。

 

$cat test.txt

1 cow

2 cow

3 pig

4 cow

$ cat test.sed

/^1/,/^3/{

       s/cow/pig/

       /^2/d

}

$ sed -f test.sed test.txt

1 pig

3 pig

4 cow

 

輸出到不一樣文件:

/^1/,/^3/{

       /^1/w 1out.txt

       /^2/w 2out.txt

       /^1/,/^3/w allout.txt

}

下一個

sed '/test/{ n; s/aa/bb/; }' example

若是test被匹配,則移動到匹配行的下一行,替換這一行的aa,變爲bb,並打印該行,而後繼續

 

退出

$ sed '10q' example-----打印完第10行後,退出sed

保持和獲取

$ sed -e '/test/h' -e '$G example

在sed處理文件的時候,每一行都被保存在一個叫模式空間的臨時緩衝區中,除非行被刪除或者輸出被取消,不然全部被處理的行都將 打印在屏幕上。接着模式空間被清空,並存入新的一行等待處理。

在這個例子裏,匹配test的行被找到後,將存入模式空間

h命令將其複製並存入一個稱爲保 持緩存區的特殊緩衝區內。

當到達最後一行後,G命令取出保持緩衝區的行,而後把它放回模式空間中,且追加到如今已經存在於模式空間中 的行的末尾

 

在這個例子中就是追加到最後一行。簡單來講,任何包含test的行都被複制並追加到該文件的末尾。

保持和互換

$ sed -e '/test/h' -e '/check/x' example

互換模式空間和保持緩衝區的內容。也就是把包含test與check的行互換

同時執行多個命令

$ sed -e '1,5d' -e 's/test/check/' example

(-e)選項容許在同一行裏執行多條命令。如例子所示,第一條命令刪除1至5行,第二條命令用check替換test。命令的執 行順序對結果有影響。若是兩個命令都是替換命令,那麼第一個替換命令將影響第二個替換命令的結果。   

 

$ sed --expression='s/test/check/' --expression='/love/d' example

 

簡單腳本示例

vi test.sed

s/pig/cow/g

[:~$] sed -f test.sed test.txt

cow

[:~$] cat test.txt

pig

 

簡單腳本示例:

[:~$] cat test.sh

 

sed '/^1/,/^3/{

s/cow/pig/

}' test.txt

[:~$] ./test.sh   

1 pig

2 pig

3 pig

4 cow

相關文章
相關標籤/搜索