sed替换短划线用下划线直到到达角色

时间:2012-07-12 12:16:13

标签: sed

这是一个示例文本

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

我想用每行中的下划线替换所有短划线( - ),直到达到=符号。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

最简单的方法就是使用look-ahead assertionsed不支持他们,但perl会:

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

答案 1 :(得分:1)

不幸的是,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

答案 2 :(得分:0)

这可能适合你(GNU sed):

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