複習:一行一行讀取到模式空間,操做完後讀取到屏幕上去,知足條件的就執行命令,不知足條件的默認也會顯示。sql
sed語法(續)ide
n 讀取下一行,會覆蓋模式空間的內容it
[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 讀取下一行內容,不會覆蓋模式空間的內容class
[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
保持空間,理解爲臨時倉庫,臨時存放數據。不作任何操做,全部操做都是在模式空間裏作的。
sed
x:讓保持空間和模式空間互換file
[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:將保持空間的內容寫入到模式空間(追加)di
[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的命令。*/