Как помечать вхождения текста?

Я хотел бы преобразовать

blue blue red green

в:

color.1=blue color.2=blue color.3=red color.4=green

Любые выводы о том, как справиться с этим? sed, awk и т. д. ?

1
задан 27 March 2015 в 23:17

2 ответа

Вот путь Python:

#!/usr/bin/env python2
input_string = 'blue blue red green'
count = 1
for value in input_string.split():
    print 'color.{0}={1}'.format(count, value),
    count += 1

Выход: color.1=blue color.2=blue color.3=red color.4=green

Вот путь sed:

$ n=1;x=color;echo "blue blue red green" | sed -rn "s/^([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)$/$x\.$n=\1 $x\.$((n+1))=\2 $x\.$((n+2))=\3 $x\.$((n+3))=\4/p" 

Выход: color.1=blue color.2=blue color.3=red color.4=green

Здесь мы использовали переменную n для хранения 1 и x для хранения строки color, а затем использовали группировку и обратную связь для получения желаемого результата.

4
ответ дан 23 May 2018 в 21:59
  • 1
    Спасибо за альтернативный путь python, прямо сейчас я просто использую bash, поэтому я буду использовать ответ madneon, ваш ответ оценен, ура! – TuxForLife 27 March 2015 в 22:38
  • 2
    @ user264974: Конечно, не стесняйтесь .. :) – heemayl 27 March 2015 в 22:39
  • 3
    @ user264974: проверьте новый добавленный путь sed (если это поможет). – heemayl 27 March 2015 в 23:58

Это awk-решение, если ваши цвета больше:

awk '{ printf("color.%d=%s ",NR, $0 ) }' RS='[[:blank:]]+' infile
color.1=blue color.2=blue color.3=red color.4=green

RS определяет пробелы / вкладки как разделитель записи с вхождениями одного или нескольких раз +. Затем команда printf печатает текущее поле «Номер записи /», а затем печатает всю запись / поле $0 из infile в качестве входного файла.

3
ответ дан 23 May 2018 в 21:59

Другие вопросы по тегам:

Похожие вопросы: