【问题标题】:sed substitute dash with underscore until character is reachedsed 用下划线替换破折号,直到到达字符
【发布时间】:2012-07-13 00:06:22
【问题描述】:

这是一个示例文本

enable-threads       = yes
enable-shared        = yes
enable-parser        = yes
DAL-II-VERSION     = 7.1.0
DAL-II-MAJOR       = -L -f -g
DAL-II-MINOR         = 1

我想将每一行中的所有破折号 (-) 替换为下划线,直到达到 = 符号。

有什么想法吗?

【问题讨论】:

    标签: sed


    【解决方案1】:

    执行此类操作的最简单方法是使用look-ahead assertionsed 不支持它们,但 perl 支持:

    perl -pe 's/-(?=.*=)/_/g'
    

    【讨论】:

      【解决方案2】:

      很遗憾,sed 不支持后视或前瞻。但是perlssed 可以(参见 Rob 的回答)。如果perl 不可用,这是使用awk 的一种方法:

      awk -F= 'OFS=FS { gsub("-", "_", $1); }1' file.txt
      

      输出:

      enable_threads       = yes
      enable_shared        = yes
      enable_parser        = yes
      DAL_II_VERSION     = 7.1.0
      DAL_II_MAJOR       = -L -f -g
      DAL_II_MINOR         = 1
      

      HTH

      【讨论】:

        【解决方案3】:

        这可能对你有用(GNU sed):

        sed 'h;s/=.*//;y/-/_/;G;s/\n[^=]*//' file
        

        【讨论】:

          猜你喜欢
          • 2010-11-19
          • 1970-01-01
          • 2013-04-01
          • 2018-05-20
          • 1970-01-01
          • 1970-01-01
          • 2011-12-24
          • 2011-05-07
          • 2013-03-22
          相关资源
          最近更新 更多