在Linux系统中,无论是编辑配置文件、编写代码还是处理文本数据,删除连续的文本块是常见操作,由于Linux环境下存在多种文本编辑工具和命令行工具,不同工具的操作方式和适用场景各有差异,掌握多种方法能根据实际需求灵活选择,本文将详细介绍主流工具中删除文字块的具体操作,包括Vim、Nano、Emacs等编辑器,以及sed、awk等命令行工具,并通过示例和对比表格帮助理解。

Vim编辑器中删除文字块
Vim作为Linux下最强大的文本编辑器之一,支持多种模式下的删除操作,包括普通模式、可视模式和命令行模式,能精确删除字符、单词、行或自定义文本块。
普通模式下的删除操作
普通模式是Vim的默认模式,通过单键或组合键实现快速删除:
- 删除单个字符:将光标定位到目标字符,按
x删除光标所在字符,按X删除光标前一个字符。 - 删除到行尾/行首:
d$删除从光标到当前行尾的所有字符;d0删除从光标到行首的所有字符(注意是数字0,不是字母o)。 - 删除整行:
dd删除当前光标所在行,若前面加数字nd(如3d),则删除从光标开始的n行。 - 删除到文件开头/末尾:
dgg删除从光标到文件开头的所有行;dG删除从光标到文件末尾的所有行。 - 删除单词:
dw删除从光标到当前单词末尾的字符(单词以空格、标点分隔);db删除从光标到单词开头的字符;diw删除整个光标所在的单词(即使光标在单词中间)。
可视模式下的精确删除
可视模式允许通过选中目标文本块再删除,适合删除不规则区域:
- 字符可视模式:按
v进入字符可视模式,通过方向键或hjkl选中连续字符,按d或x删除选中内容。 - 行可视模式:按
V(大写)进入行可视模式,选中整行或多行(通过上下键移动),按d删除选中行。 - 块可视模式:按
Ctrl+v进入块可视模式,可选中矩形区域的字符(如多行中的某几列),按d删除选中块,或按Shift+d删除选中块所在行剩余部分。
命令行模式下的范围删除
通过进入命令行模式,可基于行号或模式匹配删除文本块:
- 按行号删除:
3,5d删除第3到第5行;.,$d删除从当前行()到文件末尾();1,.d删除从文件开头到当前行。 - 按模式匹配删除:
g/pattern/d删除所有包含pattern的行(pattern为正则表达式);v/pattern/d删除所有不包含pattern的行(v是g的反义),例如g/^#/d删除所有以开头的注释行。
Nano编辑器中删除文字块
Nano是Linux下简单易用的终端编辑器,操作直观,适合新手或快速编辑场景,删除文字块主要通过键盘组合和标记功能实现。

基础删除操作
- 删除当前字符:按
Delete键删除光标所在字符,Backspace删除光标前一个字符。 - 删除到行尾/行首:
Ctrl+Delete删除从光标到行尾的所有字符;Ctrl+Backspace删除从光标到行首的所有字符。 - 删除整行:
Ctrl+k删除当前光标所在行,若前面加数字(如3Ctrl+k),则删除3行。
标记删除多行
Nano支持标记文本块后删除,适合删除连续多行:
- 标记开始:将光标移动到目标块起始行,按
Ctrl+^(或Ctrl+6)标记该行,屏幕底部会显示“[标记已启用]”。 - 扩展标记:通过方向键移动光标到目标块结束行,标记区域会高亮显示(如从第2行到第5行被标记)。
- 删除标记块:按
Ctrl+k删除所有标记的行,若需复制而非删除,可先按Ctrl+6取消标记,再用Ctrl+^+Ctrl+^复制。
Emacs编辑器中删除文字块
Emacs是高度可定制的编辑器,删除操作主要通过组合键实现,支持字符、行、区域和块删除。
基础删除操作
- 删除单个字符:
Delete删除光标前字符,Ctrl+d删除光标后字符。 - 删除到行尾/行首:
Ctrl+k删除从光标到行尾的所有字符(连续按两次可删除整行);Ctrl+0(或Ctrl+Shift+0)删除从光标到行首的所有字符。 - 删除整行:
Ctrl+a将光标移到行首,再按Ctrl+k删除整行;或直接Ctrl+x Ctrl+k删除当前行。
区域删除
Emacs通过“标记”(Mark)定义文本块,再执行删除:
- 设置标记:将光标移动到目标块起始位置,按
Ctrl+Space(或Ctrl+@)设置标记,光标所在位置会显示“Mark set”。 - 选中区域:移动光标到目标块结束位置,从标记位置到光标位置会高亮显示(如选中第3到第6行)。
- 删除区域:按
Ctrl+w剪切(删除)选中区域,或按Delete键直接删除(部分终端配置下)。
命令行工具中删除文字块
对于批量处理文件或无需交互式编辑的场景,命令行工具如sed、awk能高效删除文本块。
sed流编辑器删除
sed通过地址范围和命令组合删除文本,适合处理文件或管道流:

- 按行号删除:
sed '3,5d' file.txt删除file.txt第3到第5行;sed '$d' file.txt删除最后一行;sed '1d' file.txt删除第一行。 - 按模式匹配删除:
sed '/^#/d' file.txt删除所有以开头的行(注释);sed '/pattern/d' file.txt删除所有包含pattern的行;sed '/pattern1/,/pattern2/d' file.txt删除从包含pattern1的行到包含pattern2的行之间的所有内容。 - 组合条件删除:
sed '/^#.*$/d;/^$/d' file.txt同时删除注释行和空行。
awk文本处理删除
awk更适合复杂条件删除,通过筛选模式输出非目标行:
- 删除指定行号:
awk 'NR>=2&&NR<=4{next}1' file.txt删除第2到第4行(NR为行号,next跳过输出,1表示输出其他行)。 - 删除匹配行:
awk '!/pattern/' file.txt输出不包含pattern的行(即删除匹配行);awk '$1==10{next}1' file.txt删除第一列值为10的行。 - 删除空行:
awk 'NF' file.txt(NF为字段数,空行NF=0,不输出)。
不同工具删除文字块对比
| 工具名称 | 模式/命令 | 操作方法说明 | 示例(删除第2-4行) |
|---|---|---|---|
| Vim | 普通模式 | 2,4d |
2,4d |
| Vim | 行可视模式 | V选中2-4行,按d |
Vjjd(光标在2行,下移2行) |
| Nano | 标记删除 | Ctrl+^标记2行,下移到4行,Ctrl+k |
Ctrl+^→→Ctrl+k |
| Emacs | 区域删除 | Ctrl+Space标记2行,移动到4行,Ctrl+w |
Ctrl+Space→→Ctrl+w |
| sed | 行号删除 | sed '2,4d' file |
sed '2,4d' file.txt |
| awk | 行号删除 | awk 'NR>=2&&NR<=4{next}1' file |
awk 'NR>=2&&NR<=4{next}1' file.txt |
相关问答FAQs
问题1:如何在Vim中删除包含特定关键词“error”的所有连续行?
解答:若“error”行连续出现,可通过可视模式快速删除:
- 按
/error定位到第一个包含“error”的行; - 按
n跳转到下一个“error”行,确认连续性; - 按
V进入行可视模式,选中所有连续的“error”行; - 按
d删除选中行。
若“error”行不连续,可用命令行模式全局删除:g/error/d(删除所有包含“error”的行)。
问题2:如何使用sed删除文件中所有空行和行首的空格?
解答:结合sed的删除和替换功能分步处理:
- 删除空行:
sed '/^$/d' file.txt(^$匹配空行); - 删除行首空格:
sed 's/^ *//' file.txt(^ *匹配行首0个或多个空格); - 合并执行:
sed '/^$/d; s/^ *//' file.txt,分号分隔多个命令,先删除空行再删除行首空格。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/37731.html