sed的三種用法
1.shell命令行輸入命令
格式:sed [選項] ’sed命令‘ 輸入文件
2.將sed命令出入腳本文件後,sed命令調用
格式: sed [選項] -f sed腳本文件 輸入文件
3.將sed命令插入腳本文件後,三種腳本文件可執行,直接執行腳本文件
格式:./sed腳本文件 輸入文件
sed選項
-n 不顯示所有行到屏幕(標準輸出)
-e 表示將下一個字符串解析爲sed編輯命令,如果只傳遞一個編輯 命令給sed,-e選項可以省略
-f 表示正在調用sed腳本文件
sed的兩種定位文本方式
1.使用行號,指定一行,或指定行號範圍
2.使用正則表達式
定位文本
x x爲指定行號
x,y 指定從x到y的行號範圍
/pattern/ 出現包含模式的行
/pattern/pattern/ 查詢包含兩個模式的行
/pattern/,x 從x號到與pattern的匹配行之間的行
x,y! 查詢不包括x和y行號的行
sed編輯命令
p 打印匹配行
= 打印文件行號
a\ 在定位行號之後追加文本信息
i\ 在定位行號之前插入文本信息
d 刪除定位行
c\ 用新文本替換相應模式
r 從另一個文件中讀文件
w 將文本保存到一個文件
y 變換字符
q 第一個模式匹配完成後退出
l 顯示與八進制ASCII碼等價的控制字符
{} 在定位行執行的命令組
n 地區下一個輸入行,用下一個命令處理新的行
h 將模式緩衝區的內容複製到保持緩衝區
H 將模式緩衝區的文本追加到保持緩衝區
x 互換模式緩衝區和保持緩衝區的內容
g 將保持緩衝區的內容複製到模式緩衝區
G 將保持緩衝區的內容追加到模式緩衝區
*** 一、文本選項
1.sed命令的-n選項 --不顯示所有行到屏幕(標準輸出)
例子
sed -n '1p' input 只顯示文本第一行
sed '1p' input 不止打印第一行,還打印文本的全部內容
sed命令打印範圍行
例子
sed -n ’3,6p' input 打印文本的3到6行
打印匹配模式 -n ‘/ca/p' input 打印文本中含有ca的行
2.sed命令的-e選項 --使用多個編輯命令
例子
sed -n '/ca/=' input 打印含有ca的行號
例子
sed -n -e '/ca/p' -e '/ca/=' input 打印行有ca的行及行號
注意:不支持同時帶多個編輯命令的用法
如 sed -n '/ca/p=' input
3.sed命令的-f選項
sed ’指定地址a\text' 輸入文件
例子:
sed '/file:/a\i love you.' input
在文本input中含有file:的行後面另起一行添加i love you(作爲一行)
腳本執行追加 --在匹配行的後面插入一行內容
touch zhuijia.sed
#!/bin/sed -f #調用sed腳本
/file:/a\ # a\表示此處換行添加文本
#所添加的文本內容
l like you.\ #"\"符號表示換行
l love you.
執行腳本
給執行權限
./zhuijia.sed input
+++++++++++++++++++++++++++++++++++++++++++++++
***二、文本定位
1.匹配元字符
例子
sed -n '/\./p' input 匹配文本中含有”.“的行
2.使用元字符進行匹配
例子
sed -n '$p' input 匹配文本最後一行
sed -n '/.*bus/p' input 匹配包含bus結尾的任意字符串
3.!符號
例子
sed -n '2,10!p' input 匹配不再2到十行的所有行
4.使用行號與關鍵字匹配限定行範圍
例子
sed -n '/ca/,$p' input 打印與ca的匹配行到最後一行
sed -n '3,/ca/p' input 打印第三行到ca的匹配行
+++++++++++++++++++++++++++++++++++++++++++
***三、sed編輯命令
1.插入文本 --在匹配行的前面插入一行內容
格式:sed '指定地址i\text' 輸入文件
例子
sed腳本
#!/bin/sed -f
/file:/i\ #i\表示此處換行插入文本
we insert a new line. #插入的文本內容
作用:在file:所在的行的上一行插入 we insert a new line.這一 行內容
2.修改文本 --匹配的文本行用新文本替代
格式:‘指定地址c\text' 輸入文件
例子
#!/bin/sed -f
/file:/c\ #c\表示此處換行修改文本
We modify this line #修改的文本內容
作用: 將file:所在的文本行替換成 We modify this line文本 行
3.刪除文本 --刪除指定行或指定行範圍
格式:刪除地址d
例子
sed '1d' input 刪除文本的第一行
sed '$d' input 刪除文本的最後一行
sed '1,10d' input 刪除文本的1到10行
sed '/[Cc][Ee]/d' 刪除含有不區分大小寫的關鍵字ce的所有行
4.替換文本
格式:s/被替換的字符串/新字符串/[替換選項]
替換選項
g 表示替換文本中所有出現被替換字符串之處
p 與-n選項結合,至打印替換行
w文件名 表示將輸出定向到一個文件
1>p選項
命令格式:sed -n 's/被替換的字符串/新字符串/Np' 輸入文件
沒有-n 顯示替換了字符串後的文本
沒有p 不顯示任何內容
都有 只顯示替換了字符串的行
Np 替換每行的第N次匹配
例子
sed 's/ca/ce/p' input 將文本中含有ca的行中的第一個ca 替換成ce,並將替換後的文本顯示
sed -n 's/ca/ce/' input 將文本中含有ca 的行中的第一個 ca 替換成ce,不顯示文本
sed -n 's/ca/ce/p' input 將文本中含有ca的行中第一個ca替 換成ce,只顯示替換的行
sed -n 's/ca/ce/2p input 將文本中國含有ca的行中的第二個 ca替換成ce,只顯示替換的行
2>g選項
命令格式:sed -n 's/被替換的字符串/新字符串/g' 輸入文件
沒有g 只替換每行第一個可以替換的字符串
有g 替換每行所有可以替換的字符串
例子
sed -n 's/ca/ce/g' 將文本中含 有ca的行的所有ca替換成ce, 只顯示替換的行
3>w選項
命令格式:se -n '被替換的字符串/新字符串/w output' input
例子
sed -n 's/ca/ce/w output' input 將文本中的ca替換成ce,並將結果寫 入output文件
4>文本替換結合& --將被替換的字符串保存到&中
例子
sed -n '/ca/(&)/p' input ==sed -n '/ca/(ca)/p'
5.寫入一個新文件
命令格式:指定地址 w 文件名
例子
sed -n '1,5 w output' input 將文本input中的1到5行寫入到output中
sed -n '/ca/w output' input 將文本input中匹配ca的行寫入到output中
6.從文件中讀入文本 ---將其他文件中的文本讀入並附加到指定地址之後
格式:指定地址 r 文件名
例子
sed '/ca/r otherfile' input 將otherfile文件中的所有文本插入到 input文本中匹配ca的文本行後面
7.退出命令
格式:指定地址 q
例子
sed '5 q' input 打印文本前5行,然後退出
sed -n '/.r.*/p' input 查找”所有的“任意字符後跟r字符再跟0個或多 個任意字符
sed -n '/.r.*/q' 查找”第一個“任意字符後跟r字符再跟0個或多 個任意字符,然後退出查找
8.變換命令
格式:sed 'y/被變換的字符序列/變換的字符序列/' 輸入文件
例子:
sed ‘y/12345/abcde/' input 將文本中的12345一一對應的替換爲abcde
注意:被變換字符序列和變換字符序列必須等長
9.顯示控制字符
例子
sed -n '1,$1' input 顯示文本中的所有控制字符(如:shift,退格鍵等)
10.在等位行執行命令組
例子
等價命令 sed -n -e '/ca/p' -e '/ca/=' input
sed -n '/ca/{p;=}' input
sed '/ca/{s/i/I/g;s/le/99/;}' input 匹配ca的文本行中將所有i替 換爲I,匹配行的第一個le替換爲99
+++++++++++++++++++++++++++++++++++++++++++++++++++
***四、高級編輯
1.處理匹配行的下一行
例子
sed '/ca/{n;s/11/99;}' input 將文本中ca的匹配行的下一行中的ll替換 爲99
2.sed緩衝區的處理??????????????????????????
sed的兩種緩衝區
模式緩衝區
保持緩衝區
例子
sed -e '/ca/h' -e 'ce/x' -e '$G' input
3.利用分號分隔多個編輯命令
格式:sed '編輯命令1;編輯命令2;......'輸入文件
例子
sed 's/ca/ce; s/csa/ce' input 將文本中ca替換爲ce,csa替換爲ce
bourne shell命令行中
sed '
>s/ca/ce
>s/csa/ce
....
>$d' input