原文地址: http://www.reibang.com/p/89163e927a2c
0. 目錄
1.簡介
2.子命令
????2.1 p--輸出
????2.2 i--插入行
????2.3 a --追加行
????2.4 d刪除行
????2.5 c替換行
????2.6 s替換指定文本
- 子命令組合
1. 簡介
在命令行對(duì)文本進(jìn)行操作, 如替換某文字, 插入文字, 刪除文字等
語法格式
sed [options] commands [inputfile...]
commands
會(huì)包含一些子命令醉鳖,如p
代表打印i
和a
代表插入和追加,d
代表刪除行c
代表替換行s
代表替換單詞
option
包含的一些選項(xiàng)及其作用如下
選項(xiàng)名 | 作用 |
---|---|
-n | 取消默認(rèn)輸出 |
-e | 多點(diǎn)編輯拓轻,可以執(zhí)行多個(gè)子命令 |
-f | 從腳本文件中讀取命令(sed操作可以事先寫入腳本,然后通過-f讀取并執(zhí)行) |
-i | 直接編輯原文件 |
-l | 指定行的長度 |
-r | 在腳本中使用擴(kuò)展表達(dá)式 |
測(cè)試文本
root@wzj-dev:/opt# cat test1.txt
letitia
mail
uuencode
1003605091
01566
sed命令處理時(shí)只會(huì)改變緩沖區(qū)中文本的副本台妆,如果想要直接編輯原文件,可以使用-i選項(xiàng)或者將結(jié)果重定向到新的文件中胖翰。
以下實(shí)驗(yàn)均為緩沖區(qū)操作接剩,未改變?cè)次募?/p>
2. 子命令
2.1 p
--輸出
2.1.1 打印1-3行
root@wzj-dev:/opt# sed '1,3 p' test1.txt
letitia
letitia
mail
mail
uuencode
uuencode
1003605091
01566
因?yàn)槲醇?code>-n選項(xiàng),所以除了打印第1-3行外, 還有個(gè)默認(rèn)打印, 導(dǎo)致第1-3行打印兩遍
root@wzj-dev:/opt# sed -n '1,3 p' test1.txt
letitia
mail
uuencode
2.1.2 正則 --打印ma
開頭的那一行到最后一行
root@wzj-dev:/opt# sed -n '/^ma/,$ p' test1.txt
mail
uuencode
1003605091
01566
2.1.3 設(shè)置步長--- 第一行開始萨咳,行號(hào)遞增2輸出
root@wzj-dev:/opt# sed -n '1~2 p' test1.txt
letitia
uuencode
01566
2.2 i
--插入行
在第二行前插入一行insert111
字符串
#-e選項(xiàng)表示多個(gè)子命令懊缺,本例執(zhí)行i子命令之后執(zhí)行了p子命令
root@wzj-dev:/opt# sed -n -e '2 i insert111' -e '1,4 p' test1.txt
letitia
insert111
mail
uuencode
1003605091
2.3 a
--追加行
在第二行之后追加一行append111
字符串
root@wzj-dev:/opt# sed -n -e '2 a append111' -e '1,4 p' test1.txt
letitia
mail
append111
uuencode
1003605091
2.4 d
刪除行
刪除第二行
root@wzj-dev:/opt# sed -n -e '2 d' -e '1,$ p' test1.txt
letitia
uuencode
1003605091
01566
2.5 c
替換行
將第二行的mail
替換為newmail
root@wzj-dev:/opt# sed -n -e '2 c newmail' -e '1,$ p' test1.txt
letitia
newmail
uuencode
1003605091
01566
2.6 s
替換指定文本
2.6.1 語法格式
sed '位置參數(shù) s/pattern/replaced/[flag]'
位置參數(shù): 與前面一樣, 可以為'1,$',支持正則,也可以不指定
s: 子命令,代表替換指定文本
pattern: 要替換的文本,支持正則表達(dá)式
replaced: 用來替換的一般字符串
flag是替換標(biāo)志培他,用來影響匹配替換的規(guī)則:
flag | 用法 |
---|---|
g | 全局匹配鹃两,會(huì)替換文本行中所有匹配的字符串 |
十進(jìn)制n | 替換文本行中第n個(gè)匹配的字符串 |
p | 替換第一個(gè)匹配的字符串,并且將緩沖區(qū)輸出到標(biāo)準(zhǔn)輸出 |
w | 替換第一個(gè)匹配的字符串舀凛,并且將改動(dòng)的行輸出到磁盤文件中 |
缺省 | 替換第一個(gè)匹配的字符串 |
2.6.2 實(shí)驗(yàn)
- 將有十個(gè)數(shù)字的那一行替換為
miss letitia
#{}要轉(zhuǎn)義
root@wzj-dev:/opt# sed -n -e 's/[0-9]\{10\}/miss letitia/g' -e '1,$ p' test1.txt
letitia
mail
uuencode
miss letitia
01566
- 從第一行開始,到以字符
ma
開頭的那一行, 里面的l
全轉(zhuǎn)為大寫L
sed -n -e '1,/^ma/ s/l/L/g' -e '1,$ p' test1.txt
Letitia
maiL
uuencode
1003605091
01566
3. 子命令組合
對(duì)第1-3行做如下操作
-
l
全轉(zhuǎn)為大寫L
-
e
全轉(zhuǎn)為大寫E
- 在第二行前插入一行
tyrone
字符串 - 打印出來 ( 原來的三行加上插入的一行 )
root@wzj-dev:/opt# sed -n '1,3{
s/l/L/g
s/e/E/g
2 i tyrone
p
}' test1.txt
LEtitia
tyrone
maiL
uuEncodE