1.10-linux三劍客之sed命令詳解及用法

內容:

1.sed命令介紹
正則表達式

2.語法格式,經常使用功能bash

   查詢  增長  替換 批量修改文件名app

第1章 sed是什麼

字符流編輯器 Stream Editor編輯器

第2章 sed功能與版本

處理出文本文件,日誌,配置文件等ide

增長,刪除,修改,查詢spa

sed  --version日誌

 

sed  -i 修改文件內容blog

 

第3章 語法格式

3.1 語法格式

sed [選項] [sed指令] [輸入文件]圖片

sed -i.bak 's#oldboy#oldgril#g' oldbboy.txt內存

先備份在修改

-i   ---sed的參數

修改

-s    --sed指令

g   ---小尾巴/修飾

 

sed  找誰  幹啥

找誰----條件(查找)

幹啥----命令  替換 刪除  增長

圖片1.png 

3.2 命令執行過程

圖片3.png

sed 特性:默認輸出

  -n 取消默認輸出

模式空間:內存中專門爲sed騰出的一塊地

第4章 經常使用功能

4.1 查詢:

4.1.1 #單行 - 行號

顯示第幾行

[root@oldboyedu43-lnb oldboy]# sed -n '3p' person.txt

103,Alex,COO

 

顯示包含oldboy的行

#包含oldboy的行

[root@oldboyedu43-lnb oldboy]# sed -n '/oldboy/p' person.txt

101,oldboy,CEO

//   //內支持正則表達式         過濾內容

4.1.2 多行 連續

找出第13

sed -n 1,3p  person.ttx

 

#顯示包含oldboy的行到包含yy的行

[root@oldboy-gao oldboy]# sed -n '/oldboy/,/yy/p' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

 

顯示文件的第1,4,5

[root@oldboy-gao oldboy]# sed -n '1p;4p;5p' person.txt

101,oldboy,CEO

104,yy,CFO

105,feixue,CIO

同一行多條命令用;(分號)分隔

 

 

小結:

1. 行號

2. 正則表達式 //p

3. 範圍 /oldboy/,/yy/

 

4.2 增長

4.2.1 多行增長:  \n 換行符  (三種方法)

1. 文件的最後一行增長兩行
106,wuxingge,UFO
107,lee,XO

1)echo

echo -e "106,wuxingge,UFO\n107,lee,XO" >>person.txt

2)cat

[root@oldboy-gao oldboy]# cat >>person.txt <<ha

106,wuxingge,UFO

107,lee,XO

ha

3) sed    行號a           在文件中某一行追加內容

[root@oldboy-gao oldboy]# sed  '$a106,wuxingge,UFO\n107,lee,XO' person.txt   最後一行

 

a ===  append     追加    --下一行

i ==== insert       插入  -----上一行

錯誤

[root@oldboy-gao oldboy]# sed '2a gyf is a student\nhe's a good boy' person.txt

> ^C

三個單引號亂了

解決:單引號換雙引號

 

刪除    d      一行

4.2.2 不顯示文件中空行

grep -v '^$' person.txt

sed '/^$/d' person.txt

awk '!/^$/' person.txt

sed -n '/^$/!p' person.txt

 

!(歎號) sed  awk  find 中表示取反

4.3 替換

4.3.1 不加g  將每一行中第一處匹配的字符串進行替換

[root@oldboy-gao oldboy]# cat person.txt

101,oldboy,CEO

[root@oldboy-gao oldboy]# sed 's#[1-9]#AAA#g' person.txt|egrep -v '^$'

AAA0AAA,oldboy,CEO

g --global  每一行進行所有替換 ---> sed指令s的替換標誌之一(全局替換)

[root@oldboy-gao oldboy]# sed 's#[1-9]#AAA#' person.txt|egrep -v '^$'

AAA01,oldboy,CEO

 

 

 

 

4.3.2 sed 先備份在修改文件內容

sed  -i.bak s#[1-9]#AAA#g person.txt

先把文件備份爲person.txt.bak

而後再修改文件內容

4.3.3 變量替換     雙引號識別     ###  ###之間定義變量

[root@oldboyedu43-lnb oldboy]# x=oldboy                       定義x   y 兩個變量

[root@oldboyedu43-lnb oldboy]# y=oldgirl

[root@oldboyedu43-lnb oldboy]# sed "s#$x#$y#g" person.txt         $x   $y    應用變量

101,oldgirl,CEO

 

102,zhangyao,CTO

 

 

2. 後項引用

 

1)把匹配到的內容按規定格式形式

[root@oldboy-gao oldboy]# echo '123456'|sed -r 's#(.*)#<\1>#g'

<123456>

2)引用前面匹配到的內容

[root@oldboy-gao oldboy]# echo '123456'|sed -r 's#(.*)#<\1>#g'

<123456>

新方法 :&表示前面正則匹配到的內容  

[root@oldboy-gao oldboy]# echo '123456'|sed 's#.*#<&>#g'

<123456>

前面每一個數字都加上< >

[root@oldboy-gao oldboy]# echo '123456'|sed 's#.#<&>#g'

<1><2><3><4><5><6>

 

 

4.4 新案列:批量修改文件名    命令的拼接

.jpg修改成.avi

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy01.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy02.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy03.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy04.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy05.jpg

4.4.1 方法一:命令拼接

[root@oldboy-gao oldboy]# ls *.jpg|sed -r 's#(.*)jpg#mv & \1avi#g'

mv oldboy01.jpg oldboy01.avi

mv oldboy02.jpg oldboy02.avi

|bash   把前面的輸出交給 bash(命令解釋器) 執行

[root@oldboy-gao oldboy]# ls *.jpg|sed -r 's#(.*)jpg#mv & \1avi#g'|bash

[root@oldboy-gao oldboy]# ls *.avi

oldboy01.avi  oldboy03.avi  oldboy05.avi  oldboy07.avi  oldboy09.avi

oldboy02.avi  oldboy04.avi  oldboy06.avi  oldboy08.avi  oldboy10.avi

小結:

1. 命令拼接--解決不會循環

2. 先在屏幕上拼接出目標命令--最終交給bash執行

4.4.2 方法二:rename

rename  from                 to                file

       你要替換的內容       替換成什麼        替換哪些文件

        jpg                  avi                *.jpg

 

[root@oldboy-gao oldboy]# rename jpg avi *.jpg

[root@oldboy-gao oldboy]# ls *.avi

oldboy01.avi  oldboy03.avi  oldboy05.avi  oldboy07.avi  oldboy09.avi

oldboy02.avi  oldboy04.avi  oldboy06.avi  oldboy08.avi  oldboy10.avi

 

sed用法小結:

1. 排除                          !

2. 特殊符號===獲取行號                        =

3. 一條sed語句執行多條命令                ;

 

4.5 sed命令常見的坑  -ri   和  -ir

4.5.1 -r-i同時使用

***-r參數必須在前面

-ri

正常

-ir

先把文件備份爲xxxr

而後再替換文件中的內容

4.5.2 -i禁止與-n一塊兒使用

會把原文件內容清空

相關文章
相關標籤/搜索