2016-07-05 2 views
3

Использование sed Есть ли способ заменить все вхождения шаблона на строку после символа?sed заменить все вхождения после символа

Так, например, заменяя все пространство с подчеркиванием после полной остановки превратит это:

k i c k . t h e . b a b y 

в этом:

k i c k ._t_h_e_._b_a_b_y 

Спасибо!

+0

где находится точка между «ребенком»? ваш пример недостаточно ясен, чтобы проиллюстрировать, что вы хотите сделать. – HuStmpHrrr

+0

Опечатка, опечатка! См. Снова –

+0

@NickBull все после '.' должно иметь' _' право? –

ответ

2

Это может работать для вас (GNU СЭД):

sed -r ':a;s/(\.[^ ]*) /\1_/;ta' file 

Заменить пробелы вперед первого . с _ «ы или:

sed 's/\./&\n/;h;y/ /_/;H;g;s/\n.*\n//' file 

Разделите и победитете, используя пространство для удержания.

+0

Это красиво, браво –

1

Немного долго, и я не могу думать о более короткий путь, но работает хорошо:

sed 'h ; s/[^.]*// ; s/ /_/g ; x ; s/\..*$// ; G ; s/\n//' 
        ^^ the pattern to replace 

Или с awk:

awk -F. -vOFS=. '{a=$1 ; $1="" ; gsub(" ","_") ; print a $0}' 
            ^^the pattern to replace 
Смежные вопросы