1. sed會逐行從文件中讀取數據, 再對數據處理后顯示到屏幕, 再進行下一行的處理.
sed '4d' file.txt # 刪除文件中第4行
sed '2,6d' file.txt # 刪除文件中的2-6行
sed '5,$d' file.txt # 從第5行刪除到最后一行
sed '/root/d' file.txt # 刪除含root字符的行
sed '/root/,5d' file.txt # 前5行中有root則從root行刪到第5行, 注意第5行會保留
sed '/root/,+3d' file.txt # 刪掉有root行, 並向后刪3行.
sed '/root/!d' file.txt # 取反刪除, 留下root行
sed '1~2d' file.txt # 刪除奇數行, 從1開始, 每隔2行刪除
sed '0~2d' file.txt # 刪除偶數行, 從0開始, 每隔2行刪除
2. sed中的正則使用:
sed同grep命令一樣, 默認不支持擴展元字符, 解決辦法:
1. 將擴展元字符加對應斜線變為基本元字符.
2. sed -r 加入-r參數, 使其支持擴展元字符.
3. sed的查找替換使用:
替換的使用:
1. sed -r 's/xx/XX/' # 替換xx為XX, 只替換每行的第一個
2. sed -r 's/xx/XX/g' # 替換整行中的所有xx為XX
3. sed -r 's/xx/XX/gi' # 忽略行中內容的大小寫進行匹配替換
查找的使用:
1. sed -r '/xx/d' # 查找時不要使用s, 查找xx並刪除
4. sed的命令選項 (注意是命令, 在引號中使用的, 注意要和-后的參數區分):
5. sed的功能選項( 即-后的參數值, ):
6. &符合的作用, 就是代表, 代指, 代替的作用
如在vim中需要給3-5行內容注釋掉的寫法如下:
:3,5 s/\(.*\)/#\1/ # 解釋, vi中模式識別基本正則元字符, 括號中.*代表整行, 括號兩邊使用\給轉義了, 這正是shell中正則基本元字符的形式
:3,5 s/.*/#&/ # 作用同上, &符合就代替了前面.*, 即整行內容
:% s/.*/#&/ # %表示作用到每一行, &符合就代替了前面.*, 即整行內容
注意&號代表的是前面正則匹配到的內容, 如果匹配到的是行中的一個字符, 則就是在這個字符前加#, 注意區分正則匹配到的到底是什么
:3,5 s/^/#/ # 3-5行加注釋, 解讀: 把3-5行的開始符號替換為#號.
以上在vi中的寫法, 在sed命令中用法一模一樣, 如下:
sed '3,5s/\(.*\)/#\1/' file.txt # 如果使用-r參數, 則括號兩邊的轉義可去掉, 因為-r參數識別的就是擴展元字符
sed '/root/s///' file.txt # sed也有這種用法, s前面的內容可理解為替換的作用范圍, 3,5或者/root/都是, 規定作用行數,或包含root的行