Linux Sed 命令的總結

前言:

sed是一種流編編器,它是文本處理中非常中的工具,能夠完美的配合正則表達式便用,功物能不同凡響。

處理時,把當前處理的行存儲在臨時緩衝區中,稱爲”模式空間”( oattern space),接看用sed命令處理緩衝區中的內容,處理成後,把緩衝區的內容送往屏幕顯示。

接着理下一行,這樣不斷重複,直到文件末。文件內容沒有改改變,除非使用了寫入的命令,將內容更新。

定址用於決定對哪些行進行編輯。地址的形式可以是數字、正則表達式、或二者的結合。如果沒有指定地址,sed將處理輸入文件的所有行。

sed 的功能很強大在 腳本中 獲取文件的打印,追加,替換 ,刪除

我舉幾個我常用的幾個方法場景

 

使用方法:

打印 輸出:

打印對應文件第三行

sed -n '3p' /var/log/yum.log

只查看文件的第3行到第9行

sed -n '3,9p' /var/log/yum.log

過濾特定字符串,顯示正行內容

sed -n  '/root/p' yum.log

顯示包含"hhh"的行到包含"omc"的行之間的行

sed -n '/hhh/,/omc/p' yum.log

僅僅顯示匹配字符串的行號

 sed -n '/root/p' yum.log

 

給文件追加文件,寫入文件:

sed -i -e '1i happy' -e '$a new year' yum.log

這裏需要分析一下 首先 -i 的含義是說是插入的模式 -e 代表多編輯意思,就是說同時修改不同位置文件。 “ 1 i ” 1 的意思代表第一行 i 表示插入,他會插入第一行位置,如果是a 他會插入在第一行的末尾 , ‘ $ a’ $是正則表達式中的一種,表示所有,這個請小夥伴補充一下,正則的知識

在文件第一行和第四行的每行下面添加hahaha

sed '1,4i hahaha' yum.log

有人會想在文件的倒數第二行添加內容實現的方法

sed '$i 你要添加的內容'  Group.xml

替換 :

sed -i 's/root/world/g' yum.log

把 文件中的 root 替換 爲 world /g是全局的意思 s 查找的意思

sed -i '5,10 s/root/FTL/g' yum.log

替換 5 到 10 行的 root 變爲ftl

 

刪除:

刪除 3 行到9 行

sed  -i '3,9d' /var/log/yum.log

刪除包含"hhh"的行到包含"omc"的行之間的行

sed -i '/hhh/,/omc/d' yum.log

 

詳細參數

sed命令功能

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

命令  功能

a\  在當前行後添加一行或多行。多行時除最後一行外,每行末尾需用“\”續行

 

c\  用此符號後的新文本替換當前行中的文本。多行時除最後一行外,每行末尾需用"\"續行

 

i\  在當前行之前插入文本。多行時除最後一行外,每行末尾需用"\"續行

 

d   刪除行

 

h   把模式空間裏的內容複製到暫存緩衝區

 

H   把模式空間裏的內容追加到暫存緩衝區

 

g   把暫存緩衝區裏的內容複製到模式空間,覆蓋原有的內容

 

G   把暫存緩衝區的內容追加到模式空間裏,追加在原有內容的後面

 

l   列出非打印字符

 

p   打印行

 

n   讀入下一輸入行,並從下一條命令而不是第一條命令開始對其的處理

 

q   結束或退出sed

 

r   從文件中讀取輸入行

 

!   對所選行以外的所有行應用命令

 

s   用一個字符串替換另一個

 

g   在行內進行全局替換

 

w   將所選的行寫入文件

 

x   交換暫存緩衝區與模式空間的內容

 

y   將字符替換爲另一字符(不能對正則表達式使用y命令)

sed常見命令參數

1

2

3

4

5

6

7

p==print

d:delete

=:打印匹配行的行號

-n 取消默認的完整輸出,只要需要的 

-e 允許多項編輯

-i 修改文件內容

-r 不需要轉義

1

注意:& 符號在sed命令中代表上次匹配的結果

 

sed 中可能遇到的坑 

字符轉義問題:

1 .   替換 [ ] 時 

你想把中括號替換,它是一個不折不扣的叛徒,它需要轉義纔行 例:

sed 's/\[/aaa/g'

2. 替換(){}時,則不需要

3   記得字符轉義

 

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