これがサンプルテキストです
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
=記号に達するまで、すべての行のすべてのダッシュ(-)をアンダースコアに置き換えたいと思います。
何か案が?
これがサンプルテキストです
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読みまたは先読みはサポートされていません。しかしperl、ssedそうしてください(ロブの答えを参照してください)。利用できない場合perlは、次を使用する1つの方法があります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