介紹如何在 Linux 系統中使用 sed
指令快速刪除檔案中的某幾行。
刪除指定行
若要刪除文字檔案中的第一行,可以執行:
# 刪除 myfile.txt 的第一行 sed -i '1d' myfile.txt
若要刪除文字檔案中的第 8 行,可以執行:
# 刪除 myfile.txt 的第 8 行 sed -i '8d' myfile.txt
若要刪除文字檔案中的最後一行,可以執行:
# 刪除 myfile.txt 的最後一行 sed -i '$d' myfile.txt
若要刪除文字檔案中的第 3 行至第 6 行,可以執行:
# 刪除 myfile.txt 的第 3 行至第 6 行 sed -i '3,6d' myfile.txt
刪除匹配行
如果想要搜尋檔案內容,刪除含有特定關鍵字的行,可以執行:
# 刪除包含 my_keyword 關鍵字的行 sed -i '/my_keyword/d' myfile.txt
若要將包含 my_keyword
關鍵字的行一直到檔案結尾的每一行都刪除,可以執行:
# 刪除包含 my_keyword 關鍵字的行到檔案結尾 sed -i '/my_keyword/,d' myfile.txt
若要刪除包含 my_keyword1
或 my_keyword2
關鍵字的行,可以執行:
# 刪除包含 my_keyword1 或 my_keyword2 關鍵字的行 sed -i '/my_keyword1\|my_keyword2/d' myfile.txt
許多程式語言的註解行都會以井字號(#
)開頭,若要刪除所有井字號開頭的註解行,可以執行:
# 刪除井字號開頭的行 sed -i '/^#/d' myfile.txt
若要刪除完全沒有資料的空行,可以執行:
# 刪除空行(完全沒有資料) sed -i '/^$/d' myfile.txt
若要刪除完全沒資料的空行,以及只包含空白字元的行,則可執行:
# 刪除空行,以及只包含空白字元的行 sed -i '/^[[:space:]]*$/d' myfile.txt
備份檔案
若要刪除每個檔案的第一行,並將原始檔備份至 *.bak
,可以執行:
# 刪除每個檔案的第一行,並將原始檔備份至 *.bak sed -i.bak '1d' file1.txt file2.txt file3.txt
合併多個 CSV 檔案
假設我們有多個欄位都相同的 CSV 檔案 file1.csv
、file2.csv
、file3.csv
等,若要將這些 CSV 檔案合併成一個大的 CSV 檔案,可以使用以下指令:
# 取出第一行標頭 head -n 1 file1.csv > all.tmp # 刪除每個 CSV 檔案的第一行標頭,附加至 all.tmp sed -s '1d' *.csv >> all.tmp # 重新命名檔案 mv all.tmp all.csv