sed将破折号替换为下划线,直到到达字符

sed将破折号替换为下划线,直到到达字符,sed,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 我想用下划线替换所有虚线(-),直到达到=号为止 有什么想法吗?最简单的方法就是使用sed不支持它们,但perl支持: perl -pe 's/-(?=

这里是一个示例文本

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
不支持它们,但
perl
支持:

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

不幸的是,
sed
不支持look behinds或look aheads。但是
perl
ssed
do(参见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

这可能适合您(GNU-sed):

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