Sed:字符流編輯器,Stream Editor正則表達式
處理日誌文件,日誌,配置文件等緩存
增長、刪除、修改、查詢app
sed --version 能夠經過man sed 來檢驗系統中有沒有安裝sed編輯器
[root@luffy-001 ~]# sed --version GNU sed version 4.2.1 Copyright (C) 2009 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, to the extent permitted by law. GNU sed home page: <http://www.gnu.org/software/sed/>. General help using GNU software: <http://www.gnu.org/gethelp/>. E-mail bug reports to: <bug-gnu-utils@gnu.org>. Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
sed [選項] [sed指令] [輸入文件]測試
sed -i.bak ‘s#oldboy#oldgirl#g’ oldboy.txtspa
-i --sed命令的參數3d
s --sed命令/指令日誌
g ------小尾巴/修飾code
模式空間:sed從文件讀取一行文本後存入緩存區(這個緩存區在內存中)blog
建立測試文件
cat>person.txt<<EOF 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO EOF
-n 取消默認輸出
# #一、顯示某一行,單行 [root@luffy-001 oldboy]# sed -n '1p' person.txt 101,oldboy,CEO # #若是沒有‘1p’,默認會顯示全部內容 # #二、顯示連續多行 [root@luffy-001 oldboy]# sed -n '2,4p' person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO # #三、顯示包含oldboy的行到包含104的行 # #先看包含oldboy的行,記住要使用斜線//包起來 [root@luffy-001 oldboy]# sed -n '/oldboy/p' person.txt 101,oldboy,CEO # #顯示包含oldboy的行到以104開頭的行(只用了特殊符號) [root@luffy-001 oldboy]# sed -n '/oldboy/,/^104/p' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO [root@luffy-001 oldboy]# # #四、 查詢制定更多行,經過分號隔開 [root@luffy-001 oldboy]# sed -n '2p;4p' person.txt 102,zhangyao,CTO 104,yy,CFO
-r sed選項,支持擴展正則表達式(|、()),默認狀況,sed只支持基本正則表達式
sed裏面的正則字符左右必需要用「/」。
sed命令經過正則表達式進行過濾========至關於egrep
[root@luffy-001 oldboy]# egrep 'oldboy|yy' person.txt 101,oldboy,CEO 104,yy,CFO [root@luffy-001 oldboy]# sed -rn '/oldboy|yy/p' person.txt 101,oldboy,CEO 104,yy,CFO
a 追加append,在指定行後面添加一行或者多行文本
i 插入insert,在指定行前面添加一行或者多行文本
# 在第三行後面增長 [root@luffy-001 oldboy]# sed '3a 103.5,Lee,UFO' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 103.5,Lee,UFO 104,yy,CFO 105,feixue,CIO # 在第三行前面增長 [root@luffy-001 oldboy]# sed '3i 103.5,Lee,UFO' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103.5,Lee,UFO 103,Alex,COO 104,yy,CFO 105,feixue,CIO # 查看文件並無被修改 [root@luffy-001 oldboy]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO # $表示最後一行 [root@luffy-001 oldboy]# sed -n '$p' person.txt 105,feixue,CIO # 在最後一行加入一行內容new、new、new [root@luffy-001 oldboy]# sed '$a new,new,new' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO new,new,new
# echo >> 也能夠在文件最後追加單行
# 在最後加上多行(不經常使用,有其餘方法) [root@luffy-001 oldboy]# sed '$a new,new,new\nold,old,old,old\nwww' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO new,new,new old,old,old,old www # 使用cat命令向文件追加多行 cat >>person.txt<<EOF new,new,new old,old,old,old www EOF
[root@luffy-001 oldboy]# sed '$d' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO
[root@luffy-001 oldboy]# sed '2,3d' person.txt 101,oldboy,CEO 104,yy,CFO 105,feixue,CIO [root@luffy-001 oldboy]# sed '1,4d' person.txt 105,feixue,CIO
[root@luffy-001 oldboy]# cat -n person.txt 1 101,oldboy,CEO 2 3 102,zhangyao,CTO 4 103,Alex,COO 5 6 104,yy,CFO 7 8 105,feixue,CIO [root@luffy-001 oldboy]# cat -nA person.txt 1 101,oldboy,CEO$ 2 $ 3 102,zhangyao,CTO$ 4 103,Alex,COO$ 5 $ 6 104,yy,CFO$ 7 $ 8 105,feixue,CIO$ [root@luffy-001 oldboy]# grep -v '^$' person.txt 使用grep,去反 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO [root@luffy-001 oldboy]# sed '/^$/d' person.txt 使用sed(正則)刪除空行 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO [root@luffy-001 oldboy]# sed -n '/^$/!p' person.txt ! 表示去反 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO [root@luffy-001 oldboy]# sed '$d' person.txt 刪除最後一行 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO [root@luffy-001 oldboy]# sed '$!d' person.txt 刪除不是最後一行的全部行 105,feixue,CIO [root@luffy-001 oldboy]#
-i 修改文件 -i.ori 表示自動備份(先備份在修改)
s 單獨使用----> 將每一行匹配的字符進行替換
g 每一行所有替換----> sed指令s的替換標誌之一(全局替換)
###將變量中的內容進行替換(只要考察單雙引號的區別) #設置變量 [root@luffy-001 oldboy]# x=oldboy [root@luffy-001 oldboy]# y=oldgirl [root@luffy-001 oldboy]# #替換 使用 符號$ [root@luffy-001 oldboy]# sed 's#$x#$y#g' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO #必需要使用雙引號 [root@luffy-001 oldboy]# sed "s#$x#$y#g" person.txt 101,oldgirl,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
單引號:所見即所得
雙引號:與單引號相似,特殊符號會被解析 $ $() `` !
()的功能能夠記住正則表達式的一部分
擴展正則,使用 -r
\1 應用第一個小括號中的匹配內容,\2引用第二個小括號中的內容,sed最多能夠記住9個
題目:ehco "i am oldboy teacher" 若是想保留這一行的單詞oldboy
[root@luffy-001 oldboy]# sed = person.txt 1 101,oldboy,CEO 2 3 102,zhangyao,CTO 4 103,Alex,COO 5 6 104,yy,CFO 7 8 105,feixue,CIO
每一個 -e 選項後能夠接一個sed指令
分號的使用
案例:一個文件100行,把5,35,70行單獨拿出來