《老段帶你學sed(下)》筆記

 複習:一行一行讀取到模式空間,操作完後讀取到屏幕上去,滿足條件的就執行命令,不滿足條件的默認也會顯示。

sed語法(續)

n 讀取下一行,會覆蓋模式空間的內容

[root@mail ~]# cat 3.txt
rOOT
Mysql
Mysql sad
aaaTOM TOM
TOM fds TOM
dddd
TOM
[root@mail ~]# sed -n '2{n;p}' 3.txt  //覆蓋第二行的內容顯示第三行的內容
Mysql sad
[root@mail ~]# sed -n '1{n;p}' 3.txt
Mysql

N 讀取下一行內容,不會覆蓋模式空間的內容

[root@mail ~]# sed -n '1{N;p}' 3.txt   //顯示第一行和第二行內容
rOOT
Mysql
[root@mail ~]# sed -n '2{N;p}' 3.txt
Mysql
Mysql sad
[root@mail ~]# cat 3.txt
root ro
ot
Mysql
Mysql sad
[root@mail ~]# sed '{N;s/root/ROOT/g}; {s/ro\not/RO\nOT/g}' 3.txt
//將第一二行看成一行,root換成ROOT
ROOT RO
OT
Mysql
Mysql sad
[root@mail ~]# sed '{N;s/root/ROOT/g}; {s/ro\not/ROOT/g}' 3.txt
ROOT ROOT將第一二行看成一行並顯示成一行,root換成ROOT
Mysql
Mysql sad


保持空間,理解爲臨時倉庫,臨時存放數據。不做任何操作,所有操作都是在模式空間裏做的。

x:讓保持空間和模式空間互換

[root@mail ~]# cat 1.txt
tom
//首先讀取第一行內容到模式空間,將模式空間和保持空間的內容互換,保持空間爲tom,模式空間爲空
jingli
 //將第二行讀入模式空間,檢測模式空間的內容是否是經理,如果是與保持空間互換
bob
zongjian
lisan
yuangong
zhangsi
jingli
//要求顯示職業爲經理的人
[root@mail ~]# sed -n -e  'x;n' -e '/jingli/{x;p}' 1.txt
tom
zhangsi
//x互換第一行的模式空間和保持空間,n讀取第二行
//判斷是否爲jingli,是的話就互換保持空間和模式空間,打印輸出

h:把模式空間的內容拷貝到保持空間(會覆蓋保持空間的內容)

[root@mail ~]# sed -n -e '/jingli/!h' -e '/jingli/{x;p}' 1.txt
tom
zhangsi
//第一行,判斷模式空間讀取的內容是不是jingli,不是jingli就拷貝到保持空間
//第二行,判斷是不是jingli,是的話就互換模式空間和保持空間內容,打印出來

H:把模式空間的內容拷貝到保持空間(追加內容到保持空間)

[root@mail ~]# sed -n -e '/jingli/!h' -e '/jingli/{H;x;p}' 1.txt
tom
jingli
zhangsi
jingli
//讀取第一行tom,不是jingli拷貝到保持空間
//讀取第二行經理,是jingli,將經理追加到保持空間(tom jingli),然後互換模式空間和保持空間,打印出來
[root@mail ~]# sed -n -e '/jingli/!h' -e '/jingli/{p;x;p}' 1.txt
jingli
tom
jingli
zhangsi
//讀取第一行tom,不是jingli拷貝到保持空間
//讀取第二行經理,是jingli,打印出模式空間內容(jingli),然後互換模式空間和保持空間,打印出來(tom)
[root@mail ~]# sed -n -e '/jingli/!h' -e '/jingli/{H;x;s/\n/:/;p}' 1.txt
tom:jingli
zhangsi:jingli
//將換行\n替換成:

g:將保持空間的內容寫入到模式空間(覆蓋)

G:將保持空間的內容寫入到模式空間(追加)

[root@mail ~]# cat 1.txt
tom
jingli
bob
zongjian
lisan
yuangong
zhangsi
jingli
//將經理和姓名互換
[root@mail ~]# sed -n 'h;n;G;p' 1.txt
jingli
tom
zongjian
bob
yuangong
lisan
jingli
zhangsi
/*
保持空間      模式空間
    空         tom
   tom   h                 tom拷貝到模式空間
   tom    n    jingli      讀取下一行
         G     jingli tom  tom追加到模式空間
*/
//只輸出用戶名
[root@mail ~]# sed -n 'h;n;g;p' 1.txt
tom
bob
lisan
zhangsi


使用標籤,可以循環替換

sed ‘;標籤 範圍 1 命令 1; /模式/b 標籤名’file

[root@mail ~]# sed ':xx s/Mysql/MYSQL/; /Mysql/b xx' 3.txt
root ro
ot
MYSQL
MYSQL sad
/*定義xx標籤,執行命令爲s/Mysql/MYSQL/
/Mysql/b判斷是否還有Mysql,有的話就執行標籤xx的命令。*/

















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章