这是一个示例文本
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
我想用每行中的下划线替换所有短划线( - ),直到达到=符号。
有什么想法吗?
答案 0 :(得分:4)
最简单的方法就是使用look-ahead assertion。 sed
不支持他们,但perl
会:
perl -pe 's/-(?=.*=)/_/g'
答案 1 :(得分:1)
不幸的是,sed
不支持后视或前瞻。但perl
和ssed
会这样做(请参阅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