文本處理工具sed編輯器

1.sed基本命令格式bash

sed options script  file

sed 命令選項app

選項 描述
-e script 在處理輸入時,將script中指定的命令加載到運行命令中
-f file 在處理輸入時,將file文件中指定的命令加載到運行命令中
-n 不要爲每一個命令生成輸出,等待print命令來輸出

2.sed選項編輯器

2.1替換選項sthis

基本格式:s/para1/para2/      s命令會用斜線間隔文本字符串,第二個代替第一個                      通常只替換掉一行中匹配的第一個文本字符串spa

1.處理一行文本
$echo "this is a test test" | sed 's/test/exam/'
this is a exam test

2.處理一個文件中的多行文本
$cat data1
this is a test
this is a test
this is a test
$sed 's/test/exam/'  data1
this is a exam
this is a exam
this is a exam

3.使用多個編輯命令
$sed -e 's/this/that/; s/test/exam/'  data1    #用;號隔開,前一個命令末尾和分好之間不能有空格
that is a exam
that is a exam
that is a exam
也能夠改成
$sed -e '
>s/this/that/
>s/test/exam/' data1    #引號開始引號結束
that is a exam
that is a exam
that is a exam

4.從文件中讀取編輯命令
$cat script1
s/this/that/
s/test/exam/
$ sed -f script1 data1
that is a exam
that is a exam
that is a exam

用替換標記flag的格式:  s/pattern/replacement/flagsssr

flags有4種:3d

  • 數字,代表新文本將替換第幾處模式匹配的地方   sed  's/test/exam/2'
  • g,代表新文本將會替換全部已有文本出現的地方 sed  's/test/exam/g'
  • p,原來的行的內容要打印出來,通常與-n一塊兒用,只打印匹配的行                                  sed 's/test/exam/2'
  • w file,將替換的結果寫到文件中 ,sed  's/test/exam/w data2' 處理後的數據寫入data2中

 遇到特殊字符,特殊處理!code

$sed 's/\/bin\/bash/\bin\/dash'  /etc/passwd

#用!代替/以後的命令:容易讀取和理解,注意最後一個!
$$sed 's!/bin/bash!bin/dash!'  /etc/passwd

2.2使用地址ip

默認狀況下,sed編輯器中的命令會做用於全部行,若想只做用於特定某行或某些行,必須用行尋址ci

sed編輯器的2中行尋址

  • 行的數字範圍
  • 用文本模式來過濾出某行

命令格式: address  command   也能夠多行

address {
command1
command2
command3
} 

舉栗子

$cat data2
You are a girl 1
I am a girl 2
I am a girl 3
I am a girl 4

#替換一行
$sed '2s/girl/boy/' data2
You are a girl 1
I am a boy 2
I am a girl 3
I am a girl 4

#替換多行用逗號分隔
$sed '2,3s/girl/boy/' data2
You are a girl 1
I am a boy 2
I am a boy 3
I am a girl 4

#替換到最後一行用$命令
$sed '2,$s/girl/boy/' data2
You are a girl 1
I am a boy 2
I am a boy 3
I am a boy 4

#文本匹配
$sed '/You/s/girl/boy/' data2
You are a boy 1
I am a girl 2
I am a girl 3
I am a girl 4

#組合命令
$sed '2{
>s/I/You/
>s/am/are/
>s/girl/boy/
>}' data2
You are a boy 1
You are a boy 2
I am a girl 3
I am a girl 4

2.3刪除行命令d

sed編輯器不會修改原始文件,刪除的行只是從sed編輯器的輸出中消失了。

#刪除一行
$sed '3d'  data2     #刪除第2行 
You are a girl 1
I am a girl 3
I am a girl 4

$sed '2,3d'  data2   #刪除第2.3行
$sed '3,$d'  data2   #刪除第3到最後行
$sed '/You/d'  data2  #刪除You所在行

#注意,刪除用兩個文本模式來匹配的行時,第一個匹配模式打開刪除功能,第二個匹配模式關閉刪除功能,兩個匹配模式之間的行都會被刪
$sed '/1/,/3/d'  data2
I am a girl 4

2.4插入i和附加a文本命令

  • 插入(insert)命令i會在指定行前增長一個新行
  • 追加(append)命令會在制定行後增長一個新行
$sed '3i\you are a dog' data2  #\去掉後,執行結果同樣,爲閱讀方便,加\
You are a boy 1
I am a girl 2
you are a dog
I am a girl 3
I am a girl 4

$sed '3a\you are a dog' data2 
You are a boy 1
I am a girl 2
I am a girl 3
you are a dog
I am a girl 4

 2.5修改行C

與插入和附加相似,修改數據流中的整行文本。

$sed '3c\you are a dog' data2  #\去掉後,執行結果同樣,爲閱讀方便,加\
You are a boy 1
I am a girl 2
you are a dog
I am a girl 4

$sed '2,3c\you are a dog' data2   #將2個匹配模式之間的行換成要替換的文本。
You are a boy 1
you are a dog
I am a girl 4

2.6轉換命令y

轉換命令y是惟一能夠處理單個字符的sed編輯器命令,

格式: addressy/inchars/outchars/    其中inchars和outchars值一對一映射,inchars中第一個地府轉換成outchars中第一個字符,以此類推

$sed 'y/123/678/' data2  #\去掉後,執行結果同樣,爲閱讀方便,加\
You are a boy 6
I am a girl 7
I am a girl 8
I am a girl 4

y轉換命令是一個全局命令,它會自動轉換文本中找到的全部匹配值,沒法限定只更改該字符出現的某個地方

$echo "this 1 is a test 1" | sed 'y/123/456/'
this 4 is a test 4

2.7打印命令p = l

  • p打印出sed編輯器輸出中的一行
  • =打印行號
  • l用來列出行,容許打印文本和不可打印的ASCII字符 \t  等
    $sed '=' data2  #\去掉後,執行結果同樣,爲閱讀方便,加\
    1
    You are a boy 1
    2
    I am a girl 2
    3
    I am a girl 3
    4
    I am a girl 4
    
    
    $sed -n 'l' data2    #會打印出本句結束符$
    You are a boy 1$
    I am a girl 2$
    I am a girl 3$
    I am a girl 4$

     

2.8 sed與文件一塊兒工做寫w讀r 

格式:addressw filename     filename文件必須有寫的權限

           addressr filename     filename文件必須有讀的權限

$sed -n '2,3w test' data2
$cat test
I am a girl 2
I am a girl 3

$sed '3r test' data2
You are a girl 1
I am a girl 2
I am a girl 3
I am a girl 2   #注意這裏是從test讀出來的
I am a girl 3
I am a girl 4

文件讀文件的命令r filename 能夠與刪除命令d一塊兒使用,替換佔用文本

$ cat letter
There are those people:
LIST
will come to school.

$ sed '/LIST/{        #data3中存放着3行數據分別爲John May Shliy
>r data3              #注意:r和d不能交換位置,不然不成功
>d
>}' letter
There are those people:
John
May
Shliy
will come to school.
相關文章
相關標籤/搜索