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
遇到特殊字符,特殊處理!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文本命令
$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
$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.