日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux sed 删除行命令常见使用详解

發布時間:2024/9/27 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux sed 删除行命令常见使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ?Linux sed d命令常見使用案例

聲明與簡介

sed:Stream Editor文本流編輯,sed是一個“非交互式的”面向字符流的編輯器。本文主要以實際的數據來介紹sed的delete line(刪除)即d命令的使用。

數據說明

如下是使用的示例文本數據(emp.txt),它的結構為(員工號、員工的姓名、崗位、領導編號、雇傭日期、工資、獎金、部門編號)。這里的行號是為了方便解釋結果,不是文本內容。

1 7369,smith,clerk,7902,'1980-12-17',800,null,202 7499,allen,salesman,7698,'1981-2-20',1600,300,303 7521,ward,salesman,7698,'1981-2-22',1250,500,304 7566,jones,manager,7839,'1981-4-2',2975,null,205 7654,martin,salesman,7698,'1981-9-28',1250,1400,306 7655,jack,manager,7698,'1987-3-28',1600,1800,107 7656,tim,clerk,7902,'1982-12-12',1400,1400,308 7657,kate,clerk,7902,'1989-11-11',1400,1800,109 7698,blake,manager,7839,'1981-5-1',2850,null,3010 7699,dlake,salesman,7839,'1983-6-15',3000,null,1011 7782,clark,manager,7839,'1981-1-9',2450,null,1012 7788,scott,analyst,7566,'1982-12-9,3000,null,2013 7839,king,president,null,'1981-11-17',5000,null,1014 7844,turner,salesman,7698,'1981-12-8',1500,0,3015 7876,adams,clerk,7788,'1983-1-12',1100,null,2016 7900,james,clerk,7698,'1981-12-3',950,null,301718 --7902,ford,analyst,7566,'1981-12-3',3000,null,201920 7934,miller,clerk,7782,'1982-1-23',1300,null,10

d命令

D命令即是刪除行 (delete lines)是對sed的輸出流里的數據進行刪除而不是直接作用到文件本身。

刪除文本內容

刪除所有內容

# 1 刪除文件所有內容。執行后無返回。 sed 'd' filename# 示例 刪除emp.txt里所有內容 sed 'd' emp.txt

刪除指定行

# 2 刪除第n行的內容,輸出剩余的行。 sed 'n d' filename# 示例,刪除第2行的內容,顯示剩余的內容。通過對比原始數據,不難發現員工編號7499所在的行(第二行)被刪除。 sed '2 d' emp.txt

刪除指定的范圍

# 3 從n到m行,這里n和m都包含。。 sed 'n,m d' filename# 示例 這里刪除了第3到16行,供14行,對比原始數據,剩下6行(這里有2行空行),見下: sed '3,16 d' emp.txt7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30--7902,ford,analyst,7566,'1981-12-3',3000,null,207934,miller,clerk,7782,'1982-1-23',1300,null,10

刪除起始行到結尾

# 4 刪除第n行到最后一行,換句話說即保留文本的n-1行。 sed 'n,$ d' filename# 示例,刪除第3行到最后一行,即保留前2行。 sed '3,$ d' emp.txt7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30

遞增刪除

# 5 刪除第n行,以m為步長(增幅)的所有行,輸出為剩下內容。這里~是波浪線。 sed 'n~m d' filename# 示例,比如刪除以第1行開始,增幅為2的所有行,即刪除1、3、5、7、9、11、13、15、17、19。保留是偶數的行,可參考原始數據核驗。 sed '1~2 d' emp.txt7499,allen,salesman,7698,'1981-2-20',1600,300,30 7566,jones,manager,7839,'1981-4-2',2975,null,20 7655,jack,manager,7698,'1987-3-28',1600,1800,10 7657,kate,clerk,7902,'1989-11-11',1400,1800,10 7699,dlake,salesman,7839,'1983-6-15',3000,null,10 7788,scott,analyst,7566,'1982-12-9,3000,null,20 7844,turner,salesman,7698,'1981-12-8',1500,0,30 7900,james,clerk,7698,'1981-12-3',950,null,30 --7902,ford,analyst,7566,'1981-12-3',3000,null,20 7934,miller,clerk,7782,'1982-1-23',1300,null,10

刪除指定的范圍加號方式

# 6 刪除第n到m行之間的行,輸出剩余內容。這里m大于n,+是加號。效果等同于去掉+號。 sed 'n,+m d' filename # 示例刪除第3到21行的內容,輸出剩余的內容。 sed '3,+21 d' emp.txt7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30

刪除結合模式匹配

指定關鍵字刪除

# 1 刪除指定的關鍵詞word sed '/word/ d' filename# 示例,刪除文本里含有clerk關鍵字的行,輸出剩余內容。 sed '/clerk/ d' emp.txt7499,allen,salesman,7698,'1981-2-20',1600,300,30 7521,ward,salesman,7698,'1981-2-22',1250,500,30 7566,jones,manager,7839,'1981-4-2',2975,null,20 7654,martin,salesman,7698,'1981-9-28',1250,1400,30 7655,jack,manager,7698,'1987-3-28',1600,1800,10 7698,blake,manager,7839,'1981-5-1',2850,null,30 7699,dlake,salesman,7839,'1983-6-15',3000,null,10 7782,clark,manager,7839,'1981-1-9',2450,null,10 7788,scott,analyst,7566,'1982-12-9,3000,null,20 7839,king,president,null,'1981-11-17',5000,null,10 7844,turner,salesman,7698,'1981-12-8',1500,0,30--7902,ford,analyst,7566,'1981-12-3',3000,null,20

多個關鍵字刪除

# 2 刪除指定的關鍵詞word1、word2 sed '/word1/ d' emp.txt | sed '/word2/ d'# 刪除包含clerk和salesman的行,這里主要是借助|(管道符號)實現,即前面的輸出作為下個命令的輸入。 sed '/clerk/ d' emp.txt | sed '/salesman/ d'7566,jones,manager,7839,'1981-4-2',2975,null,20 7655,jack,manager,7698,'1987-3-28',1600,1800,10 7698,blake,manager,7839,'1981-5-1',2850,null,30 7782,clark,manager,7839,'1981-1-9',2450,null,10 7788,scott,analyst,7566,'1982-12-9,3000,null,20 7839,king,president,null,'1981-11-17',5000,null,10--7902,ford,analyst,7566,'1981-12-3',3000,null,20

關鍵字指定位置刪除

# 3 指定位置刪除,從位置n開始往下刪除匹配關鍵字word的行(含第n行),循環到文件頭匹配關鍵字word的行(匹配到的行刪除,執行到文末時從開頭繼續匹配,匹配到首個word后結束。原文件里內容的順序不變)。 sed '/word/, n d' filename# 示例,從第7行開始刪,后面有manager關鍵字的會被刪除,繼續循環到文件頭碰到首個匹配的manager結束。 sed '/manager/,7 d' emp.txt 7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30 7521,ward,salesman,7698,'1981-2-22',1250,500,30 7657,kate,clerk,7902,'1989-11-11',1400,1800,10 7699,dlake,salesman,7839,'1983-6-15',3000,null,10 7788,scott,analyst,7566,'1982-12-9,3000,null,20 7839,king,president,null,'1981-11-17',5000,null,10 7844,turner,salesman,7698,'1981-12-8',1500,0,30 7876,adams,clerk,7788,'1983-1-12',1100,null,20 7900,james,clerk,7698,'1981-12-3',950,null,30--7902,ford,analyst,7566,'1981-12-3',3000,null,207934,miller,clerk,7782,'1982-1-23',1300,null,10# 執行過程詳解,見下圖:

關鍵字到文末刪除

# 4 刪除首次匹配word的行到文件末尾sed '/word/,$ d' emp.txt# 示例,刪除manager關鍵字出現的行到文末,因為首次出現行在再底4行,所以最終保留的為前3行。sed '/manager/,$ d' emp.txt7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30 7521,ward,salesman,7698,'1981-2-22',1250,500,30

兩個關鍵字匹配方式刪除

# 5 刪除指定關鍵字word1、word2之間的內容,如果只能匹配word1時則刪除該行及之后內容,匹配時不循環(即不從文件頭繼續尋找)。 sed '/word1/,/word2/ d' emp.txt# 示例,刪除salesman和manager匹配對內的行,其它行保留,匹配時單向(不循環)。 sed '/salesman/,/manager/ d' emp.txt7369,smith,clerk,7902,'1980-12-17',800,null,20 7656,tim,clerk,7902,'1982-12-12',1400,1400,30 7657,kate,clerk,7902,'1989-11-11',1400,1800,10 7698,blake,manager,7839,'1981-5-1',2850,null,30 7788,scott,analyst,7566,'1982-12-9,3000,null,20 7839,king,president,null,'1981-11-17',5000,null,10

關鍵字和隨后n行刪除

# 6 刪除匹配到關鍵字word和隨后n行。 sed '/word/,+n d' filename# 示例,刪除匹配到salesman的行及隨后的2行 sed '/salesman/,+2 d' emp.txt7369,smith,clerk,7902,'1980-12-17',800,null,20 7657,kate,clerk,7902,'1989-11-11',1400,1800,10 7698,blake,manager,7839,'1981-5-1',2850,null,30 7839,king,president,null,'1981-11-17',5000,null,10--7902,ford,analyst,7566,'1981-12-3',3000,null,207934,miller,clerk,7782,'1982-1-23',1300,null,10

所有空行刪除

# 7 刪除文件內容里所有的空行 sed '^$/ d' filename#刪除當前文本里的空行,查看結果可知第17和19行的空行被刪除了。 sed '/^$/ d' emp.txt7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30 7521,ward,salesman,7698,'1981-2-22',1250,500,30 7566,jones,manager,7839,'1981-4-2',2975,null,20 7654,martin,salesman,7698,'1981-9-28',1250,1400,30 7655,jack,manager,7698,'1987-3-28',1600,1800,10 7656,tim,clerk,7902,'1982-12-12',1400,1400,30 7657,kate,clerk,7902,'1989-11-11',1400,1800,10 7698,blake,manager,7839,'1981-5-1',2850,null,30 7699,dlake,salesman,7839,'1983-6-15',3000,null,10 7782,clark,manager,7839,'1981-1-9',2450,null,10 7788,scott,analyst,7566,'1982-12-9,3000,null,20 7839,king,president,null,'1981-11-17',5000,null,10 7844,turner,salesman,7698,'1981-12-8',1500,0,30 7876,adams,clerk,7788,'1983-1-12',1100,null,20 7900,james,clerk,7698,'1981-12-3',950,null,30 --7902,ford,analyst,7566,'1981-12-3',3000,null,20 7934,miller,clerk,7782,'1982-1-23',1300,null,10

按指定字符開頭刪除

# 8 刪除文件內所有以字符開頭的行,這里的word可以是#、--等。 sed '/^word/ d' filename # 刪除以”—“雙短橫線開頭的行。 sed '/^--/ d' emp.txt 7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30 7521,ward,salesman,7698,'1981-2-22',1250,500,30 7566,jones,manager,7839,'1981-4-2',2975,null,20 7654,martin,salesman,7698,'1981-9-28',1250,1400,30 7655,jack,manager,7698,'1987-3-28',1600,1800,10 7656,tim,clerk,7902,'1982-12-12',1400,1400,30 7657,kate,clerk,7902,'1989-11-11',1400,1800,10 7698,blake,manager,7839,'1981-5-1',2850,null,30 7699,dlake,salesman,7839,'1983-6-15',3000,null,10 7782,clark,manager,7839,'1981-1-9',2450,null,10 7788,scott,analyst,7566,'1982-12-9,3000,null,20 7839,king,president,null,'1981-11-17',5000,null,10 7844,turner,salesman,7698,'1981-12-8',1500,0,30 7876,adams,clerk,7788,'1983-1-12',1100,null,20 7900,james,clerk,7698,'1981-12-3',950,null,307934,miller,clerk,7782,'1982-1-23',1300,null,10

總結

以上是生活随笔為你收集整理的Linux sed 删除行命令常见使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。