sed命令基本用法

sed是一個非交互式文本編輯器,它可對文本文件和標準輸入進行編輯
sed 適用於如下三種場合
編輯相對交互式文本編輯器而言太大的文件
編輯命令太複雜,在交互式文本編輯器中難以輸入的狀況
對文本掃描一遍,可是須要執行多個編輯函數的狀況
sed只對緩衝區中原始文件的副本進行編輯,並不編輯原始的文件,所以若是須要保存改動的內容,須要將輸出重定向到另外一個文件bash

sed命令選項及其意義
-n --不打印全部的行到標準輸出
-e --表示將下一個字符串解析爲sed編輯命令,若是隻傳遞一個編輯命令給sed,-e能夠省略
-f --表示正在調用sed腳本文件app

sed命令定位文本的方法
x --x爲指定行號
x,y --指定從x到y的行號範圍
/pattern/ --查詢包含模式的行
/pattern/pattern/ --查詢包含兩個模式的行
/pattern/,x --從與pattern的匹配行到x號行之間的行
x,/pattern/ --從x號行到與pattern的匹配行之間的行
x,y! --查詢不包括x和y行號的行
 
sed編輯命令
p --打印匹配行
= --打印文件行號
a\ --在定位行號以後追加文本信息
i\ --在定位行號以前插入文本信息
d --刪除定位行
c\ --用新文本替換定位文本
s --使用替換模式替換相應模式
r --從另外一個文件中讀文本
w --將文本寫入到一個文件
y --變換字符
q --第一個模式匹配完成後退出
l --顯示與八進制ASCII碼等價的控制字符
{} --在定位行執行命令組
n --讀取下一個輸入行,用下一個命令處理新的行
h --將模式緩衝區的文本複製到保持緩衝區
H --將模式緩衝區的文本追加到保持緩衝區
x --互換模式緩衝區和保持緩衝區的內容
g --將保持緩衝區的文本複製到模式緩衝區
G --將保持緩衝區的文本追加到模式緩衝區

sed命令選項的一組例子
將第一行內容打印出來
sed -n '1p' dwa_m_excel_dura_aggr_prop.log
將第一行取出來,並重定向到dim_ia_test.log文件中
sed -n '1p' dwa_m_excel_dura_aggr_prop.log > dim_ia_test.log
將第3~6行內容打印出來
sed -n '3,6p' dwa_m_excel_dura_aggr_prop.log
將包含application的行打印出來(這裏大小寫是敏感的)
sed -n '/application/p' dwa_m_excel_dura_aggr_prop.log
將包含application的行號打印出來(這裏大小寫是敏感的)
sed -n '/application/=' dwa_m_excel_dura_aggr_prop.log
將包含application的行號和行內容打印出來(這裏大小寫是敏感的),當多個編輯命令同時實現時,加-e
sed -n -e '/application/=' -e '/application/p'  dwa_m_excel_dura_aggr_prop.log
sed追加文本,在instead.後面追加we append a new line.內容
sed '/instead./a\we append a new line.' dim_ia_test.log編輯器

sed追加文本,使用-f : cat append.sed函數

#!/bin/sed -f
#instead.爲要查找的內容,a\表示此處換行添加文本
/instead./a\
we append a new line.\
we append another line.

 爲腳本賦可執行權限 chmod u+x append.sedthis

運行腳本:spa

./append.sed dim_ia_test.logexcel

在a\爲在定位行號以後插入文本信息blog

運行結果爲:字符串

 sed文本定位的一組例子io

將含有.的行打印出來,'.'爲元字符,須要轉義
sed -n '/\./p' dim_ia_test.log
將最後一行打印出來
sed -n '$p' dim_ia_test.log   
等價
sed -n '$'p dim_ia_test.log
將以ing結尾的行打印出來
sed -n '/.*ing/p' dim_ia_test.log
2~10行不打印,其餘行打印出來
sed -n '2,10!p' dim_ia_test.log  
將含有HIVE_CONF_DIR的行到最後一行的行內容打印出來
sed -n '/HIVE_CONF_DIR/,$p' dim_ia_test.log
將第三行到含有HIVE_CONF_DIR的行的內容打印出來
sed -n '3,/HIVE_CONF_DIR/p' dim_ia_test.log 

sed基本編輯命令的一組例子

1、sed插入文本,使用i\

cat insert.sed

 

#!/bin/sed -f
/instead./i\
We insert a new line.

 

爲腳本賦可執行權限 chmod u+x insert.sed

運行該腳本

./insert.sed dim_ia_test.log

  

 

在i\爲在定位行號以前插入文本信息

2、sed修改文本用c\

cat modify.sed

 

#!/bin/sed -f
/instead./c\
We modify this line.

 

爲腳本賦可執行權限 chmod u+x modify.sed

運行該腳本:

./modify.sed dim_ia_test.log

運行結果:

 3、sed刪除文本,不區分大小寫

cat delete.sed

#!/bin/sed -f
/[Ii][Nn][Ss][Tt][Ee][Aa][Dd]/d

腳本賦可執行權限 chmod u+x delete.sed  

運行該腳本:

運行結果將instead所在的行刪除;

 刪除第一行文本
sed '1d' dim_ia_test.log
刪除最後一行文本
sed '$d' dim_ia_test.log
刪除第一行到第十行的內容
sed '1,10d' dim_ia_test.log 
刪除第5行到最後一行的內容
sed '5,$d' dim_ia_test.log   
替換文本
g --表示替換文本中全部出現被替換字符串之處
p --與-n選項結合,只打印替換行
w 文件 --表示將輸出定向到一個文件
將instead替換爲xxxxx,並打印所有
sed 's/instead/xxxxx/' dim_ia_test.log
只打印替換的行(此時已替換)
sed -n 's/instead/xxxxx/p' dim_ia_test.log
替換全部出現被替換的字符串
sed -n 's/number/xxxxx/pg' dim_ia_test.log 
將只打印的替換行寫入output文件
sed -n 's/number/xxxxx/w output' dim_ia_test.log
將文件中出現的number用()括起來,並打印
sed -n 's/number/(&)/pg' dim_ia_test.log
等價
sed -n 's/number/(number)/pg' dim_ia_test.log
寫入一個新文件
將1~5行寫入output文件中
sed -n '1,5 w output' dim_ia_test.log     
將含有number關鍵字的行寫入output文件中
sed -n '/number/w output' dim_ia_test.log
查找含有instead的行,將output文件的內容插入到instead行下面
sed  '/instead/r output' dim_ia_test.log 
退出命令
打印前5行,而後退出
sed  '5 q' dim_ia_test.log 
打印從第一行到含有number的行,並退出
sed  '/number/q' dim_ia_test.log

在定位行執行命令組將含有number的行內容和行號打印出來sed -n '/number/{p;=}' dim_ia_test.log

相關文章
相關標籤/搜索