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的文本內容:
[root@rhel7?~]#?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/Unix中sed命令中的實用案例
2. 使用基本sed命令操作文件
使用基本sed命令操作文件
2.1 在每一行后面插入一行空白
[root@rhel7?~]#?sed?G?a.txt2.2 在每一行后面插入兩行空白
[root@rhel7?~]#?sed?'G;G'?a.txt2.3 刪除空行,并在每一行之后插入一個空行
[root@rhel7?~]#?sed?'/^$/d;G'?a.txt2.4 在匹配“love”的每一行上插入空行
[root@rhel7?~]#?sed?'/love/{x;p;x;}'?a.txt2.5 在匹配“love”的每一行下面插入空行
[root@rhel7?~]#?sed?'/love/G'?a.txt2.6 在每一行的左邊插入5個空格
[root@rhel7?~]#?sed?'s/^/?????/'?a.txt3. 行編號
給文件的每一行標上序號(左對齊)。=用于給行編號。用于數字和句子之間的制表符(TAB)
[root@rhel7?~]#?sed?=??a.txt?|?sed?'N;s///'給文件的每一行編號(左對齊,右對齊)。這個命令類似于cat -n filename
[root@rhel7?~]#?sed?=?a.txt?|?sed?'N;?s/^/?????/;?s/?*(.{4,})/1??/'為文件的每一行編號,空行除外:
[root@rhel7?~]#??sed?'/./='?a.txt?|?sed?'/./N;?s//?/'4. 刪除指定行
刪除特定行語法:
sed?‘nd’?filename例如:
[root@rhel7?~]#?sed?'5d'?a.txt刪除最后一行語法:
sed?‘$d’?filename刪除從x到y的行
語法:
sed?‘x,yd’?filename[root@rhel7?~]#?sed?'3,5d'?a.txt從第N行開始刪除語法:
sed?‘nth,$d’?filename例如:
[root@rhel7?~]#?sed?'2,$d'?a.txt刪除內容匹配的行:語法:
sed?‘/pattern/d’?filename例如:
[root@rhel7?~]#?sed?'/life/d'?a.txt刪除從第n行開始的行以及從第n行開始的第2行
語法:
sed?‘n~2d’?filename例如:
[root@rhel7?~]#?sed?'3~2d'?a.txt刪除與內容匹配的行以及后面的兩行語法:
sed?‘/pattern/,+2d’?filename例子:
[root@rhel7?~]#?sed?'/easy/,+2d'?a.txt刪除空行:
[root@rhel7?~]#?sed?'/^$/d'?a.txt刪除空行或以“#”開頭的行
[root@rhel7?~]#?sed?-i?'/^#/d;/^$/d'?a.txt5. 查看或打印文件
如果我們想查看文件的內容,那么我們使用cat命令,如果我們想查看任何文件的底部和頂部內容,我們使用head和tail等工具。但是,如果我們需要查看文件中間的特定部分,該怎么辦呢?在這里,我們將討論如何使用sed命令來查看文件指定部分。
查看或打印文件
查看文件x到y行的內容:
語法:
例子:
[root@rhel7?~]#?sed?-n?'2,5p'?a.txt查看除給定范圍之外的整個文件內容:語法:
sed?‘x,yd’?filename例如:打印文件,除了第2和第4行。
[root@rhel7?~]#?sed?'2,4d'?a.txt打印文件的第n行語法:
sed?-n?‘address’p?filename例子:
[root@rhel7?~]#?sed?-n?'4'p?a.txt從第x行打印到第y行。語法:
sed?-n?‘x,y’p?filename例子:
[root@rhel7?~]#?sed?-n?'4,6'p?a.txt只打印最后一行語法:
sed?-n?'$'p?filename例如:
[root@rhel7?~]#?sed?-n?'$'p?a.txt打印文件,從第n行到文件結束語法:
sed?-n?‘n,$p’?filename例如:
sed?-n?'3,$'p?a.txt6. 打印匹配內容
只打印與指定匹配內容的行
語法:
sed?-n?/pattern/p?filename例子:
[root@rhel7?~]#?sed?-n?/every/p?a.txt打印與指定內容匹配的行。例如從匹配行到第x行。語法:
sed?-n?‘/pattern/,xp’?filename例子:接下來打印與指定內容匹配的行,第三行打印與指定內容everyone匹配的行,因此它從第3行打印到第5行。如果要打印文件直到結束,請使用$來代替5。
[root@rhel7?~]#?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.txt7. 用sed命令替換文件內容
用sed命令替換文件內容
把life替換為leaves
sed?'s/life/leaves/'?a.txt替換一行中出現的第n個匹配內容語法:
sed?‘s/old_pattern/new_pattern/n’?filename例子:替換匹配內容行的第2個匹配的內容:
[root@rhel7?~]#?sed?'s/to/two/2'?a.txt我們寫“2”是因為我們替換了第二個出現的內容。同樣,你可以根據需要修改,比如修改為3或4等。
替換每一行中出現的所有匹配內容:
[root@rhel7?~]#?sed?'s/life/learn/g'?a.txt將匹配內容從第n個開始替換為目標內容:語法:
sed?‘s/old_pattern/new_pattern/ng’?filename例子:從每行第2個匹配內容開始替換
[root@rhel7?~]#?sed?'s/to/TWO/2g'?a.txt這個sed命令將每一行(上面的命令帶有g表示每一行)中出現的第二個、第三個等匹配的to替換為TWO。
如果您希望只打印替換行,那么使用“-n”選項和“/p”打印標志來只顯示替換行。
[root@rhel7?~]#?sed?-n?'s/to/TWO/p'?a.txt如果您希望打印替換的行兩次,那么只使用“/p”打印標記而不使用“-n”選項
[root@rhel7?~]#?sed?'s/to/TWO/p'?a.txt替換特定行號上的匹配內容。這里,“m”是行號。
語法:
sed?‘m?s/old_pattern/new_pattern/’?filename例如:
[root@rhel7?~]#?sed?'3?s/every/each/'?a.txt如果您只想打印替換的行
[root@rhel7?~]#?sed?-n?'3?s/every/each/p'?a.txt在已定義的行范圍內替換字符串語法:
sed?‘x,y?s/old_pattern/new_pattern/’?filenamex = 開始的行號y = 結束的行號
例子:
[root@rhel7?~]#?sed?'2,5?s/to/TWO/'?a.txt注意:如果我們希望將匹配內容操作到文件的最后一行,可以使用$來代替y。
例如:
[root@rhel7?~]#?sed?'2,$?s/to/TWO/'?a.txt如果您希望替換匹配的內容以忽略字符大小寫(以大寫或小寫開頭),那么有兩種方法可以替換這些匹配的內容
首先,可以先/i的參數
語法:
sed?‘s/old_pattern/new_pattern/i’?filename例如:
[root@rhel7?~]#?sed?'s/life/Love/i'?a.txt第二種方法,可以使用正則表達式:
[root@rhel7?~]#?sed?'s/[Ll]ife/Love/g'?a.txt將多個空格替換為單個空格
[root@rhel7?clang]#?sed?'s/??*/?/g'?filename在指定匹配內容的行里,替換內容語法:
sed?‘/followed_pattern/?s/old_pattern/new_pattern/’?filename例子:
[root@rhel7?~]#?sed?'/is/?s/live/love/'?a.txt替換內容,除了第N行語法:
sed?‘n!s/old_pattern/new_pattern/’?filename例子:
[root@rhel7?~]#?sed?-i?'5!s/life/love/'?a.txt8. 總結
通過本文的演示,您應該對sed命令的功能與作用應該有大致的了解了吧?這些案例都很實用的,可以收藏起來以備不時之需。
總結
以上是生活随笔為你收集整理的sed 删除某一行_Linux常用命令三剑客之sed,您真的会用吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么CAP不能同时满足的简单理解
- 下一篇: 对象引用 String引用