在 Linux 文件中“一下子刪除多行”,核心是用 文本編輯工具(vi/vim) 或 流式編輯命令(sed),根據“行號”“匹配規則”批量刪行,下面按「最常用場景」整理方法,兼顧簡單性和實用性:
一、用 vim 編輯器(直接編輯文件時用,可視化更易操作)
先通過 vim 文件名 打開文件,再按以下方式批量刪行,操作後按 :wq 保存退出(按 :q! 放棄修改):
1. 按行號刪除(精準刪指定範圍行)
- 刪單行:光標移到目標行,按
dd(快捷操作,無需輸入命令); - 刪連續多行(如刪第 5-20 行): 在命令模式下輸入(按
Esc進入命令模式)::5,20d # 格式::起始行號,結束行號d(d=delete) - 刪從當前行到文件末尾(如光標在第 8 行,刪 8 到最後一行):
:.,$d # . 表示當前行,$ 表示文件末尾 - 刪從文件開頭到當前行(如光標在第 10 行,刪 1 到 10 行):
:1,.d
2. 按匹配規則刪除(刪所有符合條件的行)
比如刪所有註釋行(以 # 開頭,含前導空格)、空行,和你之前的 grep 需求呼應:
- 刪所有以
#開頭的註釋行(含前導空格)::g/^\s*#/d # g=全局匹配,^\s*#=註釋行正則,d=刪除 - 刪所有空行:
:g/^$/d # ^$=空行正則 - 刪同時滿足“註釋行+空行”(一次性刪兩類行):
:g/^\s*#\|^$/d # \| 表示“或”,需轉義
3. 刪包含指定關鍵詞的行(如刪所有含“test”的行)
:g/test/d # 全局匹配含“test”的行並刪除
二、用 sed 命令(不打開文件,直接批量刪行,適合腳本)
sed 是流式編輯工具,可直接在終端執行命令刪行,無需打開文件,核心語法:sed -i '刪行規則' 文件名(-i 表示“原地修改”原文件)。
1. 按行號刪行
- 刪第 3 行:
sed -i '3d' 文件名 - 刪第 5-15 行:
sed -i '5,15d' 文件名 - 刪最後一行:
sed -i '$d' 文件名
2. 按規則刪註釋行、空行(和你之前的 nginx.conf 場景完美適配)
- 刪所有註釋行(含前導空格)+ 空行(推薦!直接淨化配置文件):
sed -i '/^\s*#\|^$/d' conf/nginx.conf - 只刪註釋行:
sed -i '/^\s*#/d' 文件名 - 只刪空行:
sed -i '/^$/d' 文件名
3. 刪包含指定關鍵詞的行(如刪所有含“debug”的行)
sed -i '/debug/d' 文件名
關鍵注意事項(避免誤刪!)
- sed 先預覽再刪除:首次使用
sed時,去掉-i參數可預覽刪除效果(不修改原文件),確認無誤再加-i:sed '/^\s*#\|^$/d' conf/nginx.conf # 先預覽要保留的內容(即刪除後的效果) sed -i '/^\s*#\|^$/d' conf/nginx.conf # 確認無誤後原地修改 - vim 誤刪恢復:vim 中刪錯行可按
u撤銷(單次撤銷),或Ctrl+r恢復; - 重要文件備份:修改關鍵文件(如 nginx.conf、配置文件)前,先備份:
cp conf/nginx.conf conf/nginx.conf.bak # 備份後再刪行,出錯可恢復
總結
- 想可視化操作、精準控制:用
vim的:g/規則/d或:行號範圍d; - 想快速批量刪、適配腳本:用
sed -i '規則d' 文件名; - 刪註釋行+空行(淨化配置文件):優先用
sed -i '/^\s*#\|^$/d' 文件名,和你之前的 grep 過濾需求完全匹配,一步到位!