天天看點

linux sed删除指定行_Linux常用指令三劍客之sed,您真的會用嗎?

請關注本頭條号,每天堅持更新原創幹貨技術文章。

如需學習視訊,請在微信搜尋公衆号“智傳網優”直接開始自助視訊學習

1. 前言

本文主要講解Linux系統中的sed指令的作用與使用案例。

sed用于查找、過濾、文本替換、替換和插入、删除等文本操作。它是Linux/Unix系統提供的強大實用程式之一。我們可以在正規表達式中使用sed。使用sed指令之前,您應該至少對Linux正規表達式有基本的了解。

它提供了文本檔案的非互動式編輯,這就是為什麼它被用來自動編輯。它有兩個緩沖區-pattern buffer和hold buffer。sed在逐行讀取檔案時使用pattern buffer,并且将目前讀取的行插入到pattern buffer中,而hold buffer是一個長期存儲,它捕獲資訊,存儲資訊,并在需要時重用這些資訊。最初,兩者都是空的。SED指令用于執行不同的操作,甚至可以不打開檔案。

首先建立a.txt檔案,我将在該檔案上執行sed指令的操作。在本教程中,我使用了a.txt檔案解釋了所有的例子。如果我編寫每個sed指令的輸出,本文就會變得太長。是以,您可以先引用同一個檔案來練習所有的指令。

檢視a.txt的文本内容:

[[email protected] ~]# cat a.txt
           

輸出如下:

life isn't meant to be easy, life is meant to be lived.Try to learn & understand something new everyday in life.Respect everyone & most important love everyone.Don’t hesitate to ask for love & don’t hesitate to show love too.Life is too short to be shy.In life experience will help you differentiating right from wrong.
           
linux sed删除指定行_Linux常用指令三劍客之sed,您真的會用嗎?

Linux/Unix中sed指令中的實用案例

2. 使用基本sed指令操作檔案

linux sed删除指定行_Linux常用指令三劍客之sed,您真的會用嗎?

使用基本sed指令操作檔案

2.1 在每一行後面插入一行空白

[[email protected] ~]# sed G a.txt
           

2.2 在每一行後面插入兩行空白

[[email protected] ~]# sed 'G;G' a.txt
           

2.3 删除空行,并在每一行之後插入一個空行

[[email protected] ~]# sed '/^$/d;G' a.txt
           

2.4 在比對“love”的每一行上插入空行

[[email protected] ~]# sed '/love/{x;p;x;}' a.txt
           

2.5 在比對“love”的每一行下面插入空行

[[email protected] ~]# sed '/love/G' a.txt
           

2.6 在每一行的左邊插入5個空格

[[email protected] ~]# sed 's/^/     /' a.txt
           

3. 行編号

給檔案的每一行标上序号(左對齊)。=用于給行編号。用于數字和句子之間的制表符(TAB)

[[email protected] ~]# sed =  a.txt | sed 'N;s///'
           

給檔案的每一行編号(左對齊,右對齊)。這個指令類似于cat -n filename

[[email protected] ~]# sed = a.txt | sed 'N; s/^/     /; s/ *(.{4,})/1  /'
           

為檔案的每一行編号,空行除外:

[[email protected] ~]#  sed '/./=' a.txt | sed '/./N; s// /'
           

4. 删除指定行

删除特定行文法:

sed ‘nd’ filename
           

例如:

[[email protected] ~]# sed '5d' a.txt
           

删除最後一行文法:

sed ‘$d’ filename
           

删除從x到y的行

文法:

sed ‘x,yd’ filename
           
[[email protected] ~]# sed '3,5d' a.txt
           

從第N行開始删除文法:

sed ‘nth,$d’ filename
           

例如:

[[email protected] ~]# sed '2,$d' a.txt
           

删除内容比對的行:文法:

sed ‘/pattern/d’ filename
           

例如:

[[email protected] ~]# sed '/life/d' a.txt
           

删除從第n行開始的行以及從第n行開始的第2行

文法:

sed ‘n~2d’ filename
           

例如:

[[email protected] ~]# sed '3~2d' a.txt
           

删除與内容比對的行以及後面的兩行文法:

sed ‘/pattern/,+2d’ filename
           

例子:

[[email protected] ~]# sed '/easy/,+2d' a.txt
           

删除空行:

[[email protected] ~]# sed '/^$/d' a.txt
           

删除空行或以“#”開頭的行

[[email protected] ~]# sed -i '/^#/d;/^$/d' a.txt
           

5. 檢視或列印檔案

如果我們想檢視檔案的内容,那麼我們使用cat指令,如果我們想檢視任何檔案的底部和頂部内容,我們使用head和tail等工具。但是,如果我們需要檢視檔案中間的特定部分,該怎麼辦呢?在這裡,我們将讨論如何使用sed指令來檢視檔案指定部分。

linux sed删除指定行_Linux常用指令三劍客之sed,您真的會用嗎?

檢視或列印檔案

檢視檔案x到y行的内容:

文法:

sed -n ‘x,yp’ filename
           

例子:

[[email protected] ~]# sed -n '2,5p' a.txt
           

檢視除給定範圍之外的整個檔案内容:文法:

sed ‘x,yd’ filename
           

例如:列印檔案,除了第2和第4行。

[[email protected] ~]# sed '2,4d' a.txt
           

列印檔案的第n行文法:

sed -n ‘address’p filename
           

例子:

[[email protected] ~]# sed -n '4'p a.txt
           

從第x行列印到第y行。文法:

sed -n ‘x,y’p filename
           

例子:

[[email protected] ~]# sed -n '4,6'p a.txt
           

隻列印最後一行文法:

sed -n '$'p filename
           

例如:

[[email protected] ~]# sed -n '$'p a.txt
           

列印檔案,從第n行到檔案結束文法:

sed -n ‘n,$p’ filename
           

例如:

sed -n '3,$'p a.txt
           

6. 列印比對内容

隻列印與指定比對内容的行

文法:

sed -n /pattern/p filename
           

例子:

[[email protected] ~]# sed -n /every/p a.txt
           

列印與指定内容比對的行。例如從比對行到第x行。文法:

sed -n ‘/pattern/,xp’ filename
           

例子:接下來列印與指定内容比對的行,第三行列印與指定内容everyone比對的行,是以它從第3行列印到第5行。如果要列印檔案直到結束,請使用$來代替5。

[[email protected] ~]# sed -n '/everyone/,5p' a.txt
           

列印第x行到比對的行,如果沒有找到比對内容,則列印到檔案的最後。文法:

sed -n ‘x,/pattern/p’ filename
           

例如:

sed -n '1,/everyone/p' a.txt
           

從比對的内容開始列印往下列印N行(不包括比對行)

sed -n ‘/pattern/,+xp’ filename
           

例子:

sed -n '/learn/,+2p' a.txt
           

7. 用sed指令替換檔案内容

linux sed删除指定行_Linux常用指令三劍客之sed,您真的會用嗎?

用sed指令替換檔案内容

把life替換為leaves

sed 's/life/leaves/' a.txt
           

替換一行中出現的第n個比對内容文法:

sed ‘s/old_pattern/new_pattern/n’ filename
           

例子:替換比對内容行的第2個比對的内容:

[[email protected] ~]# sed 's/to/two/2' a.txt
           

我們寫“2”是因為我們替換了第二個出現的内容。同樣,你可以根據需要修改,比如修改為3或4等。

替換每一行中出現的所有比對内容:

[[email protected] ~]# sed 's/life/learn/g' a.txt
           

将比對内容從第n個開始替換為目标内容:文法:

sed ‘s/old_pattern/new_pattern/ng’ filename
           

例子:從每行第2個比對内容開始替換

[[email protected] ~]# sed 's/to/TWO/2g' a.txt
           

這個sed指令将每一行(上面的指令帶有g表示每一行)中出現的第二個、第三個等比對的to替換為TWO。

如果您希望隻列印替換行,那麼使用“-n”選項和“/p”列印标志來隻顯示替換行。

[[email protected] ~]# sed -n 's/to/TWO/p' a.txt
           

如果您希望列印替換的行兩次,那麼隻使用“/p”列印标記而不使用“-n”選項

[[email protected] ~]# sed 's/to/TWO/p' a.txt
           

替換特定行号上的比對内容。這裡,“m”是行号。

文法:

sed ‘m s/old_pattern/new_pattern/’ filename
           

例如:

[[email protected] ~]# sed '3 s/every/each/' a.txt
           

如果您隻想列印替換的行

[[email protected] ~]# sed -n '3 s/every/each/p' a.txt
           

在已定義的行範圍内替換字元串文法:

sed ‘x,y s/old_pattern/new_pattern/’ filename
           

x = 開始的行号y = 結束的行号

例子:

[[email protected] ~]# sed '2,5 s/to/TWO/' a.txt
           

注意:如果我們希望将比對内容操作到檔案的最後一行,可以使用$來代替y。

例如:

[[email protected] ~]# sed '2,$ s/to/TWO/' a.txt
           

如果您希望替換比對的内容以忽略字元大小寫(以大寫或小寫開頭),那麼有兩種方法可以替換這些比對的内容

首先,可以先/i的參數

文法:

sed ‘s/old_pattern/new_pattern/i’ filename
           

例如:

[[email protected] ~]# sed 's/life/Love/i' a.txt
           

第二種方法,可以使用正規表達式:

[[email protected] ~]# sed 's/[Ll]ife/Love/g' a.txt
           

将多個空格替換為單個空格

[[email protected] clang]# sed 's/  */ /g' filename
           

在指定比對内容的行裡,替換内容文法:

sed ‘/followed_pattern/ s/old_pattern/new_pattern/’ filename
           

例子:

[[email protected] ~]# sed '/is/ s/live/love/' a.txt
           

替換内容,除了第N行文法:

sed ‘n!s/old_pattern/new_pattern/’ filename
           

例子:

[[email protected] ~]# sed -i '5!s/life/love/' a.txt
           

8. 總結

通過本文的示範,您應該對sed指令的功能與作用應該有大緻的了解了吧?這些案例都很實用的,可以收藏起來以備不時之需。