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 刪除第三行 ...