尝试在sed中使用换行符和制表符(“\ n \ t”)搜索并替换换行符(“\ n”)

时间:2015-03-06 14:57:28

标签: vim sed

我有一个文本块,我试图在脚本中编辑:

首先,我试过

VAR2=`echo $VAR | sed 's/\n/\n\t/g'

删除换行符,但不会添加换行符或换行符。

这是一个愚蠢的错误吗?不逃避我应该做的事情吗?

1 个答案:

答案 0 :(得分:2)

两件事:

  1. 您必须阻止$VAR的shell扩展,否则新线将在您有机会处理之前丢失
  2. sed以基于行的方式工作。它单独处理每一行,并且它们之间没有看到换行符(除非你做特殊的事情)。
  3. 第一个可以通过引用$VAR来处理,我将通过将问题重新表述为“将标签插入每行的开头而不是第一个”来避免的第二个问题。这让我们:

    VAR2=$(echo "$VAR" | sed '1!s/^/\t/')
    

    sed代码的含义:在1!条件下(我们不处理第一行的情况),执行s/^/\t/ - 即,在开头替换空字符串带有标签的行。

    请注意,要查看替换的结果,您还必须引用它,否则它将被shell扩展,并且插入的空格将丢失。也就是说,

    echo "$VAR2"
    

    将显示您想要的结果,而

    echo $VAR2
    

    将丢失所有格式(如果段落中有$这样的特殊字符,则可能会发生愚蠢的事情。