行編輯器sed的應用

sed

sed:Stream EDitor,行編輯器

sed是一種流編輯器,它一次處理一行內容,處理時,把當前處理的行存儲在臨時緩沖區中,

稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,

把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒

有改變,除非你使用重定向存儲輸出。

sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等

選項:

-n:不輸出模式空間中的內容至屏幕;理解為僅顯示處理過的結果,禁用默認輸出

-e:多點編輯

-f /path/to/script_file:從指定文件中讀取編輯腳本

-r:支持使用正則表達式

-i:直接編輯原文件

sed使用格式為地址命令

地址定界:

  1. 不給定任何地址或空地址,對全文進行處理

  2. 單地址;

       #:指定地#行

     pattern:被此模式模式所匹配的每一行

3.地址范圍:

#,#:起始行到結束行

#,+#:例如3,+8==>從第3行開始,向下8行,包含第3行,共計9行

#,/pattern/:從第#行開始,到第一次能夠被模式匹配的行結束

/pattern1/,/pattern2/:從第一次能夠被模式1匹配的行開始,到第一個能夠被模式2所匹配的行結束

/是固定的模式符號,必須要帶

4.~:步進

1~2奇數行

2~2:偶數行

編輯命令:

d:刪除模式空間匹配的行

p:顯示模式空間中的內容

a\text:在行后面追加文本text;支持使用\n實現多行追加

i\text:在行前面插入文件text;支持使用\n實現多行插入

c\text:替換為點行或多行文本

w /path/to/somefile:保存模式匹配的行至指定文件

r /path/form/somefile :讀取指定文件的文本至模式空間匹配的行后

=:為模式空間中的行打印行號

?。耗J娇臻g中匹配行取反處理,條件取反,   (取反!要放在命令之前)例如“!d”

                                           地址定界!編輯命令==>!位置

命令應用實例操作

[root@localhost ~]# cat test
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# sed '1,5d'  test
6       
7                                    ===>1,5為地址表示從第一行到第五行,d命令是刪除匹配的行
8                                        所以,結果是只顯示文件的6到10行
9
10
[root@localhost ~]#
[root@localhost ~]# sed '1,5p'  test
1
1                             ===>因為模式空間中的內容默認會顯示,p命令顯示模式空間匹配的內容
2                                 模式空間匹配的是1至5行,默認會顯示1至10行,所以最終顯示如下結果                     
3                                 
3                                 
4
4
5
5
6
7
8
9
10
[root@localhost ~]# sed -n '1,5p'  test
1
2                               ===>-n選項不輸出模式空間中的內容至屏幕,相當于禁用了默認顯示的功能,
3                                    所以只顯示了p命令匹配的1至5行
4
5
[root@localhost ~]#
[root@localhost ~]# sed '1 a\newline' file    ==>在第一行后面追加文本newline
1
newline
2
3
4
5
[root@localhost ~]# sed '1 i\newline' file   ==>在第一行前面插入文本newline
newline
1
2
3
4
5
[root@localhost ~]# sed '1 c\newline' file   ==>第一行替換為文本newline
2
3
4
5
[root@localhost ~]# sed '2,4 w a' file  ==>將第二行到第四行的內容保存至a文件中
1
2
3
4
5
[root@localhost ~]# cat a              ==>a文件內容為file文件第二到第四行
2
3
4
[root@localhost ~]# sed '2r A' file     ==>將A文件內容讀取至第二行后面
1
2
ahhahahah
3
4
5
[root@localhost ~]# cat A         
ahhahahah

sed工具

s///:查找替換,支持使用其他分隔符,s@@@,s###

替換標記:

  g:行內全局替換

  p:顯示替換成功的行

  w  /path/to/somefile:將替換的行保存至文件中

看下sed實例

1.sed ‘2p’ /etc/passwd

第二行顯示兩邊,其他行默認顯示,太長了就沒全顯示出來了 

blob.png

2.sed –n ‘2p’ /etc/passwd

因為-n選項禁用了模式空間默認輸出至屏幕的功能,所以只顯示了第二行

blob.png

3.sed –n ‘1,4p’ /etc/passwd

和上面以上,所以只顯示1至4行

blob.png

4.sed –n ‘/root/p’ /etc/passwd

只顯示包含root的行;

blob.png

5.sed –n ‘2,/root/p’ /etc/passwd  從2 行開始

顯示從第二行開始,到第一個匹配到root的行結束之間的行

備注:/root/要從第二行后開始匹配

blob.png

6.sed -n ‘/^$/=’ file  顯示空行行號

blob.png

7.sed –n –e ‘/^$/p’ –e ‘/^$/=’ file

僅顯示空行和其行號

blob.png

8.sed ‘/root/a\superman’ /etc/passwd 行后

在能夠匹配到root的行后面追加superman

blob.png

9.sed ‘/root/i\superman’ /etc/passwd  行前

在能夠匹配到root的行前插入Superman

blob.png

10.sed ‘/root/c\superman’ /etc/passwd 

把能夠匹配到root的替換成superman

blob.png

11.sed ‘/^$/d’ file

刪除空行

blob.png

12.sed ‘1,10d’ file

刪除1到10行,因為總共才7行,刪光了還不夠,所以上面都不顯示

blob.png

13.nl /etc/passwd | sed ‘2,5d’

刪除了第2到5行

blob.png

14.nl /etc/passwd | sed ‘2a\tea’

在第二行后面追加tea

blob.png

15.sed 's/test/mytest/g' example

將test替換成mytest,g表示全局替換

blob.png

16.sed –n‘s/root/&superman/p’ /etc/passwd  單詞后

將root替換成rootsuperman,并只顯示匹配到root的行

備注:&代表前面匹配到的root

blob.png

17.sed –n‘s/root/superman&/p’ /etc/passwd  單詞前

將root替換成supermanroot,并只顯示匹配到root的行

備注:&代表前面匹配到的root

blob.png

18.sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets

將dog替換成cat,將hi替換成lo,因為-e選項是可以多點編輯的,意思是可以同時編輯多個

blob.png

19.sed –i.bak ‘s/dog/cat/g’ pets

-加上i選項會修改原文件,安全起見,備份原文件為pets.bak

blob.png

高級編輯命令:

h:把模式空間中的內容覆蓋至保持空間中

H:把模式空間中的內容追加至保持空間中

g:從保持空間取出數據覆蓋至模式空間

G:從保持空間取出內容追加至模式空間

x:把模式空間中的內容與保持空間中的內容進行互換

n:讀取匹配到的行的下一行覆蓋至模式空間

N:追加匹配到的行的下一行至模式空間

d:刪除模式空間中的行

D :刪除 當前模式空間開端至\n 的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

還是看看實例好了

  1. sed -n 'n;p' FILE

顯示偶數行

理解:讀取第一行時,第二行覆蓋至模式空間,并顯示,然后讀取第三行,

      下一行第四行覆蓋至模式空間,并顯示,如此類推

blob.png

2. sed '1!G;h;$!d' FILE

逆序顯示===>所有的命令都是針對模式空間

說明:讀取第一行時,1命令不處理,將第一行內容覆蓋至保存空間,將模式空間中的第一行刪除

      讀取第二行時,將保存空間的內容追加至模式空間,此時模式空間里面有第二行第一行,

      然后將此時模式空間的內容覆蓋至保存空間,然后刪掉模式空間的第二一行

      讀取第三行時,將保存空間的內容追加至模式空間,此時模式空間里面有第三行第二行第一行,

      然后此時模式空間的內容覆蓋至保存空間,然后刪掉模式空間的第三二一行

      讀取第四(最后)行時,將保存空間的內容追加至模式空間,此時模式空間里面有第四行第三行第二行第一行,

      然后此時模式空間的內容覆蓋至保存空間,最后一個命令不處理,模式空間顯示內容為第四三二一行

blob.png

3. sed '$!N;$!D' FILE

顯示倒數兩行

說明:

讀取第一行時,將第二行追加至模式空間,然后刪除

讀取第三行時,將第四行追加至模式空間,然后刪除

讀取第五行時,將第六(最后)行追加至模式空間,然后顯示

blob.png

4.sed '$!d' FILE

顯示最后一行

說明:

讀取第一行時,刪除

讀取第二行時,刪除

讀取第三行時,刪除

讀取第四行時,刪除

讀取第五行時,刪除

讀取第六(最后)行時,顯示

blob.png

5. sed ‘G’ FILE

在每一行后面追加空行

說明:

讀取第一行時,將保持空間中的空行追加至模式空間,然后顯示

讀取第二行時,將保持空間中的空行追加至模式空間,然后顯示

讀取第三行時,將保持空間中的空行追加至模式空間,然后顯示

讀取第四行時,將保持空間中的空行追加至模式空間,然后顯示

讀取第五行時,將保持空間中的空行追加至模式空間,然后顯示

讀取第六行時,將保持空間中的空行追加至模式空間,然后顯示

blob.png

6.sed ‘g’ FILE

將每一行替換成空行

說明:

讀取第一行時,將保持空間中的空行覆蓋至模式空間,然后顯示

讀取第二行時,將保持空間中的空行覆蓋至模式空間,然后顯示

讀取第三行時,將保持空間中的空行覆蓋至模式空間,然后顯示

讀取第四行時,將保持空間中的空行覆蓋至模式空間,然后顯示

讀取第五行時,將保持空間中的空行覆蓋至模式空間,然后顯示

讀取第六行時,將保持空間中的空行覆蓋至模式空間,然后顯示

blob.png

7. sed ‘/^$/d;G’ FILE

沒搞明白,待研究

blob.png

8.sed 'n;d' FILE

顯示奇數行

說明:

讀取第一行時,第二行覆蓋至模式空間,然后刪除

讀取第三行時,第四行覆蓋至模式空間,然后刪除

讀取第五行時,第六行覆蓋至模式空間,然后刪除

blob.png

9.sed -n '1!G;h;$p' FILE

逆序顯示

說明:

讀取第一行時,1命令不處理,將第一行內容覆蓋至保存空間,將模式空間中的第一行不顯示

讀取第二行時,將保存空間的內容追加至模式空間,此時模式空間里面有第二行第一行,

然后將此時模式空間的內容覆蓋至保存空間,然后模式空間的第二一行不顯示

讀取第三行時,將保存空間的內容追加至模式空間,此時模式空間里面有第三行第二行第一行,

然后此時模式空間的內容覆蓋至保存空間,然后模式空間的第三二一行不顯示

讀取第四(最后)行時,將保存空間的內容追加至模式空間,此時模式空間里面有第四行第三行第二行第一行,

然后此時模式空間的內容覆蓋至保存空間,最后一行,模式空間顯示內容為第四三二一行

blob.png

原創文章,作者:qiuwei,如若轉載,請注明出處:http://www.www58058.com/32090

(0)
qiuweiqiuwei
上一篇 2016-08-10
下一篇 2016-08-10

相關推薦

  • N25-第五周作業

    第五周作業 1、顯示當前系統上root、fedora或user1用戶的默認shell; grep "^\(root|fedora|user1\)" /etc/passwd | cut -d: -f7 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); grep "…

    Linux干貨 2017-02-14
  • LVS集群類型

     lvs:Linux Virtual Server         l4:四層路由、四層交換          根據請求報文的目標IP和目標PORT將其調度轉發至后端的某主機;      IPTABLES:  …

    Linux干貨 2017-01-10
  • Shell腳本的編寫

    1.什么是Shell腳本 Shell腳本是利用 shell 的功能所寫的一個程序 program,這個程序是使用純文本文件,將一些 shell 的語法與指令(含外部指令)寫在里面, 搭配正則表達式、管線命令與數據流重導向等功能,以達到我們所想要的處理目的。 Shell 腳本可以簡單的被看成是批處理文件, 也可以被說成是一個程序語言,且這個程序語言由于都是利用…

    Linux干貨 2017-04-16
  • 14 用戶組和權限管理4

    14 用戶組和權限管理4 一、雜項知識整理 1、groups 查看用戶所屬組列表 [user1@localhost ~]$ groups user3 user1 2、文件屬性:-rw-r–r–. 1 root root 0 8月   3 07:56 cgroup.clone_children &…

    Linux干貨 2016-08-04
  • 一、循環語句:for, while, until 循環執行:將某代碼段重復運行多次重復運行多少次:循環次數事先已知循環次數事先未知有進入條件和退出條件 1.for……do……done for 變量 in 列表 ; do    循環體done 執行機制:依次將列表中的元素賦值給“變量名”; 每次賦值后即執行一次循環體; 直到列表中…

    Linux干貨 2016-08-19
  • 第一周

       注意:請同學們不要參考我這個,怕誤導,謝謝 A.計算機組成及其功能     1.計算機的組成分:硬件和軟件         硬件:CPU,存儲設備(內存,硬盤),輸入輸出設備(鍵盤,顯示器,鼠標)  &n…

    Linux干貨 2016-12-31
欧美性久久久久