【问题标题】:sed replace empty line with charactersed 用字符替换空行
【发布时间】:2014-04-11 09:38:14
【问题描述】:

如何使用 sed 将文件中的空行替换为某个字符?

我使用了以下命令,但它仍然返回原始输入:

sed 's/^$/>/' filename

原始输入:

ACTCTATCATC

CTACTATCTATCC

CCATCATCTACTC

...

期望的输出:

ACTCTATCATC
>
CTACTATCTATCC
>
CCATCATCTACTC
>
...

感谢您的帮助

【问题讨论】:

  • 你的空白行有空格吗?你的命令对我有用
  • 是的,这就是问题所在。

标签: bash sed awk


【解决方案1】:

您的输入中可能有空格。首先要尝试的是:

sed 's/^[[:blank:]]*$/>/' filename

【讨论】:

  • 效果很好。非常感谢。你能解释一下输入中的空格是什么意思吗?
  • 问题是您的“空白”行实际上可能包含空格键或制表符,sed 可以看到这些,但不会在 ^$ 上匹配。鉴于我的建议有效,我相信情况确实如此。
【解决方案2】:

您的filename' 空行中可能有制表符或空格,请尝试以下操作:

sed 's/^\s*$/>/' filename

【讨论】:

  • 由于某种原因,该命令不会将空格转换为 >。 Raman Shah 和 jay pal 的回答都有效。感谢您的帮助。
  • \s 是一个 Perl 正则表达式扩展,受一些 sed 变体支持,但绝对不便携或不推荐。
【解决方案3】:

这是awk 的一种方式。如果您有空格或空行,这不会在意:

awk '!NF{$0=">"}1' file

NF 代表字段数。由于空白行或只有空格的行没有字段,我们使用它来插入您的文本。 1 触发条件为true 并打印以下行:

测试:

$ cat -vet file
ACTCTATCATC$
      $
CTACTATCTATCC$
$
CCATCATCTACTC$
       $

$ 是行尾标记

$ awk '!NF{$0=">"}1' file
ACTCTATCATC
>
CTACTATCTATCC
>
CCATCATCTACTC
>

【讨论】:

  • 感谢您的帮助。 awk 工作得很好。 awk 不如 sed 挑剔吗?
  • @cebach561 不客气。在外交上,我会说它比sed 更灵活。 :)
【解决方案4】:

以下代码应该可以工作:

sed -i  's/^[[:space:]]*$/string/' foo

【讨论】:

    【解决方案5】:

    这里缺少的是转义字符。这对你有用。

    sed 's/^$/\>/g' filename
    

    如果您需要删除空行并打印其他行,请尝试

    sed '/^$/d' filename
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多