You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除Linux文件中空行(含空格/制表符)及其上一行?

解决方案:删除含空白字符的空行及其上一行

问题分析

你需要删除文件中仅包含空格/制表符的空行,以及该空白行的上一行。之前尝试的grep -B 1 -v无法生效,是因为grep的反向匹配无法处理这种关联多行的删除逻辑;而原sed命令失效是因为匹配规则只针对完全空的行(^$),没有覆盖带空白字符的情况。

方法一:修正后的sed命令

利用tac倒序文件,将目标行对(上一行+空白行)转换为空白行在前、原上一行在后的顺序,再用sed删除匹配的空白行及其下一行,最后倒序恢复原顺序:

tac filename | sed '/^[[:space:]]*$/,+1 d' | tac

原理说明

  • tac filename:将文件内容倒序输出,把原文件中“上一行→空白行”的结构变成“空白行→上一行”
  • sed '/^[[:space:]]*$/,+1 d':匹配任意空白字符组成的行(^[[:space:]]*$),并删除该行以及紧随其后的一行(即原文件的上一行)
  • tac:再次倒序,恢复文件的原始顺序

方法二:awk命令处理

通过记录上一行内容,逐行判断并控制输出:

awk '
    prev == "" { prev = $0; next }
    /^[[:space:]]*$/ { prev = ""; next }
    { print prev; prev = $0 }
    END { print prev }
' filename

原理说明

  1. 初始化prev变量保存上一行内容,若prev为空(处理第一行时),直接将当前行赋值给prev并跳过后续逻辑
  2. 若当前行是仅含空白字符的行,清空prev(相当于放弃输出上一行)并跳过
  3. 若当前行是有效内容,输出prev(即上一行有效内容),并将当前行更新为新的prev
  4. END块输出最后一行有效内容(避免遗漏)

验证示例

针对你的输入文件:

967 
   
          7

7836 783 273
6

使用上述任意命令后,输出结果符合预期:

7

7836 783 273
6

内容的提问来源于stack exchange,提问作者user19619903

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:12:08