【问题标题】:Can't remove empty lines with sed regex无法使用 sed 正则表达式删除空行
【发布时间】:2012-06-01 02:40:37
【问题描述】:

我有一个这样的文件:

2733617     3.00    3   3

2733617 E1b1    8.00    8   16
2733617 E1b1b1b 2.00    2   4

2733617 I1  294.00  296 590
2733617 I2  1.00    1   2

2733617 I2a1    2.00    2   4

sed '/^$/d' 对我不起作用。 Outfile 看起来就像 infile。它应该删除空行。

【问题讨论】:

  • 检查那些“空”行上没有空格(包括回车):od -c filename
  • 感谢您提供一个很高兴知道的命令。但是空行中只有“\n”。
  • sed -n l file 将显示 sed 在删除换行符后看到的内容。
  • 每个空行都有美元符号。
  • 多么奇怪。你的命令应该有效。你能发布od -x的输出吗?

标签: regex sed linefeed


【解决方案1】:

你也可以试试:

 sed -n '/^./p'

仅打印行首至少有一个字符的行。 (顺便说一句sed '/^$/d' 为我工作)

【讨论】:

  • 1.也可以使用grep -v '^$' 2、sed命令如何使用?使用 UNIX 管道? (cat file | sed ...)?也许您正在管道标准错误输出而不是标准输出?
  • Grep 给了我同样的结果。我“sed 'blahblah' 文件 > 新文件”。
【解决方案2】:

由于“空白”行中似乎存在未知的不可打印字符,您可以重新编写 sed 命令以仅显示其中包含可打印字符的行:

sed -n '/[!-~]/p'

【讨论】:

    【解决方案3】:

    不幸的是,手册说使用像[!-~] 这样的范围是不安全的。但是,最终使用:print: 打印包含可打印字符的行对我有用:

    sed -n '/[[:print:]]/p'
    

    【讨论】:

    • 这是一个老问题,我不知道这个神秘的文件今天在哪里。
    【解决方案4】:

    删除空行:

    sed '/^[[:space:]]*$/d'
    

    【讨论】:

    • 格伦,对不起。我是sed 的菜鸟。你能解释一下d 修饰符的作用吗?我用谷歌搜索没有结果:)
    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多