これがサンプルテキストです
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