3

これがサンプルテキストです

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

=記号に達するまで、すべての行のすべてのダッシュ(-)をアンダースコアに置き換えたいと思います。

何か案が?

4

3 に答える 3

4

そのようなことを行う最も簡単な方法は、先読みアサーションを使用することです。sedそれらをサポートしていませんが、サポートしてperlいます:

perl -pe 's/-(?=.*=)/_/g'
于 2012-07-12T13:58:36.540 に答える
1

残念ながら、後sed読みまたは先読みはサポートされていません。しかしperlssedそうしてください(ロブの答えを参照してください)。利用できない場合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

于 2012-07-12T14:08:43.883 に答える
0

これはあなたのために働くかもしれません(GNU sed):

sed 'h;s/=.*//;y/-/_/;G;s/\n[^=]*//' file
于 2012-07-12T16:06:22.833 に答える