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

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

blue blue red green

в:

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

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

3
задан 27 March 2015 в 22:17

3 ответа

В Bash:

colors="blue blue red green"
i=1
for c in $colors; do
    echo -n "color.$((i++))=$c "
done

версия Командной строки (легкий к copy& вставьте к терминалу) с 2 строками - установка переменных сначала и затем основного сценария:

colors="blue blue red green"; i=1
for c in $colors; do echo -n "color.$((i++))=$c "; done
8
ответ дан 27 March 2015 в 22:17

Вот является 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, затем использовали группировку и backreferencing для получения желаемого результата.

4
ответ дан 27 March 2015 в 22:17

Вот решение, если Ваши цвета так больше:

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
ответ дан 27 March 2015 в 22:17

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

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