sed命令刪除前100行裡匹配的行

2021-10-08 19:08:10 字數 1475 閱讀 5944

sed是linux系統裡非常簡單實用的文字處理小工具,配合正規表示式以及find、grep等基本命令,可以非常快速實現一些日常的文字處理。

舉幾個簡單的例子吧:

1. 將當前目錄下所有txt檔案中abc替換為xyz:

sed -i 『s/abc/xyz/g'  *.txt

解釋一下,這裡-i引數是直接修改輸入檔案, 』s/abc/xyz/g' 是對輸入檔案執行的操作, *.txt 是當前目錄下的所有txt檔案。

『s/abc/xyz/g'  意思是把輸入檔案逐行讀入,然後查詢abc並替換為xyz。這裡的s就是替換操作的意思,g是指替換這一行的所有abc。也就是說,如果一行有多個abc都會替換;如果沒有這個g,只會替換第乙個abc。當然了,如果這一行沒有abc, 就不會替換。

2. 給替換操作新增行數範圍限制, 比如在前100行進行查詢替換(後續行不替換),可以寫成:

sed -i 『1,100s/abc/xyz/g'  *.txt

3. 匹配字串並刪除該行: 

sed  -i  '/zhangsan/d'   myfile.txt

這個命令會把myfile.txt裡,所有包含zhangsan這個字串的行,都刪掉。 

4. 那麼問題來了,如果只想對前100行進行查詢並刪除呢? 

不能寫成sed -i  '/zhangsan/1,100d'  myfile.txt 

也不能寫成 sed  -i  '1,100/zhangsan/d'  myfile.txt 

都會報格式錯誤,那到底該怎麼寫呢?

正確的寫法是: 

sed  -i  "1,100"  myfile.txt

5. 插入一行字串,比如在檔案開頭插入下面的作者和日期資訊

#arthur: kevyoung

sed   -i   』1i\#arthur: kevyoung'   myfile.c

這裡1i的意思是在第一行插入,如果是在最後一行插入,寫成

sed   -i   』$i\#arthur: kevyoung'   myfile.c

6. find跟sed結合使用: 

比如需要替換的檔案分布在當前目錄下的各個子目錄裡,可以先查找到,再使用sed處理:

find  .  -name  「*.txt"  |  xargs  sed  -i  's/abc/xyz/g'

7. grep跟sed結合使用: 

比如先查詢包含zhangsan的檔案,然後將這些檔案裡的abc替換為xyz

grep -rl  zhangsan  . | xargs sed -i  's/abc/xyz/g'

這裡grep的引數r是指在當前目錄下的所有子子孫孫目錄查詢,引數l(小寫l)是列舉出檔名。

sed命令你給刪除指定行

sed命令常用到的兩個選項 i 直接在檔案上編輯 edit files in place e 預設選項 只在命令列輸出,而檔案不改變 add the script to the commands to be executed 注 使用sed命令可以使用 i 或者 e 選項 以下例子僅以 i舉例 se...

sed常見用法,刪除匹配行的上2行,下3行

root test200 cat testab cdef root test200 sed c testab c定義乙個標籤a,匹配c,然後n把下一行加到模式空間裡,匹配最後一行時,才退出標籤迴圈,然後命令d,把這個模式空間裡的內容全部清除。if 匹配 c a追加下一行 if 不匹配 goto a ...

linux系統刪除指定的行(sed命令)

1 使用vim建立測試資料 a.txt root linuxprobe test cat a.txt 1w e t 2s f h 3z c g 4e a g 5a f w 6k h d 7 w f r 2 刪除指定的行 root linuxprobe test sed 3d a.txt 刪除第三行 ...