【问题标题】:Sed and dollar signSed 和美元符号
【发布时间】:2015-07-12 17:29:51
【问题描述】:

“Unix 编程环境”指出,在 sed 的正则表达式中使用的 '$' 表示行尾,这对我来说很好,因为

cat file | sed 's/$/\n/'

被解释为“在每行末尾添加换行符”。

问题出现了,当我尝试使用命令时:

cat file | sed '$d'

这一行不应该删除每一行而不是最后一行吗?在这种情况下,美元符号表示最后一行的结束。我哪里错了?

【问题讨论】:

    标签: bash sed escaping


    【解决方案1】:

    $s 命令的模式中使用时被视为正则表达式锚,例如

    s/$/\n
    

    但是在$d 中,$ 不是正则表达式锚,它是地址表示法,表示输入的最后一行,使用d 命令。

    另请注意,cat 在您的最后一个命令中是不必要的。它可以用作:

    sed '$d' file
    

    【讨论】:

      【解决方案2】:

      在第二种用法中,没有正则表达式。 $有一个地址,意思是最后一行。

      【讨论】:

        【解决方案3】:

        请注意,sed 中的regex 必须在分隔符(;:~ 等)内,而不是引号。

        /regex/
        

        例如:

        sed '/foo/s/bar/bux/g' file
        

        ~regex~
        

        例如:

        sed 's~dd~s~' file
        

        但不是'regex'。所以'$d' 中的$ 不会被sed 视为正则表达式。 '$d' 就像一个地址,指出最后一行。

        【讨论】:

          猜你喜欢
          • 2018-06-19
          • 2018-01-15
          • 2015-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-02
          • 2021-08-13
          相关资源
          最近更新 更多