sed: Sustitute char "A" в части строки и держать его в других частях - PullRequest
0 голосов
/ 22 февраля 2011

Все в заголовке:

вот строковый шаблон многострочного файла:

foo_bar_alpha = "a1b2c3_cat_andthis"  
barfoo_bar_alpha = "just a int number"  
loremfoo_bar_beta = "192.168.0.0"  
... other lines come here ...

Используя sed (и / или awk и / или perl), янеобходимо заменить символ "_" на ".", но только в первой части строки, которая разделена справа "=", и оставьте вторую часть (после "=").

Sthg like:

sed "s/(.*)=(.*)/ \1 with "_" replaced by "." = \2/g" < my_file
                   ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
                          how to do that ?

Спасибо в adv.

Ответы [ 3 ]

2 голосов
/ 22 февраля 2011

Сырой, но эффективный:

sed 'h;s/.*=/=/;x;s/=.*//;s/_/\./g;G;s/\n//' filename
2 голосов
/ 22 февраля 2011
 awk '{gsub("_",".",$1)}1' ./infile

Input

$ cat ./infile
foo_bar_alpha = "a1b2c3_cat_andthis"
barfoo_bar_alpha = "just a int number"
loremfoo_bar_beta = "192.168.0.0"

Выход

$ awk '{gsub("_",".",$1)}1' ./infile
foo.bar.alpha = "a1b2c3_cat_andthis"
barfoo.bar.alpha = "just a int number"
loremfoo.bar.beta = "192.168.0.0"

* Примечание : Если вам обязательно нужно разделить =, потому что ваши имена переменных содержат пробелы (весьма сомнительно), тогда это работает:

awk -F= '{gsub("_",".",$1)}1' OFS="=" ./infile
1 голос
/ 22 февраля 2011

используйте awk вместо sed

awk 'BEGIN{OFS=FS="="}{gsub("_",".",$1)}1' file

ruby -F"=" -ane '$F[0].gsub!(/_/,".");print $F.join("=")' file
...