【问题标题】:Delete empty lines from a file从文件中删除空行
【发布时间】:2012-12-07 20:53:06
【问题描述】:

我需要从文件中删除空行(只有空格 - 不是空记录)。

以下命令仅适用于空行,但不适用于 空格:

sed '/^$/d' filename

可以用 grep 完成吗?

【问题讨论】:

标签: unix sed grep


【解决方案1】:

\s* 用于仅包含空格的空行:

 sed '/^\s*$/d' file 

要将更改保存回文件,请使用-i 选项:

sed -i '/^\s*$/d' file 

编辑:

正则表达式 ^\s*$ 匹配仅包含空格的行,grep -v 打印与给定模式不匹配的行,因此以下将打印所有非黑色行:

 grep -v '^\s*$' file

【讨论】:

  • 如果您知道空白行没有空格,那么您可以将该 grep 减少为 grep . file
  • 为了完整性:awk 'NF' file
  • \s 在许多 Unix 机器上都会失败(它可能是 GNUism 或 perlism)。相反,应该使用 POSIX 类 [:blank:][:space:]
【解决方案2】:

POSIX 可移植的方式是

sed -i '/^[[:blank:]]*$/d' file

grep -v '^[[:blank:]]*$' file

【讨论】:

    【解决方案3】:
    sed -i '/^[ \t]*$/d' file-name
    

    它将删除所有没有任何编号的空白行。空白(空格或制表符),即文件中的(0个或更多)..

    注意:方括号内有一个“空格”后跟“\t”...

    "-i" 将强制将更新后的内容写回文件中...如果没有此标志,您可以看到屏幕上的空行已被删除,但实际文件不会受到影响。

    【讨论】:

      【解决方案4】:

      文件是从 Windows 机器复制的,而 sed 命令 (sed '/^$/d' foo ) 运行不正确。

      我运行了以下命令,它工作了。

      $ dos2unix foo

      【讨论】:

        猜你喜欢
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-27
        • 2013-01-12
        • 1970-01-01
        相关资源
        最近更新 更多