LINUX.ORG.RU

Bash: объединение конструкций

 


0

1

Необходимо обработать произвольное количество конструкций, имеющих определенную структуру, например, что-то сделать с числами, разделенными запятой и (опционально) пробелом, например, «1,2,5,7,10...» или «1, 2, 5, 7, 10...»

Пишу скрипт вида

#!/bin/bash

line="Пункты 1, 2, 3"
pattern="Пункты \([[0-9]*[ ,]]*\)"
line=`echo "$line"|sed "s/$pattern/Claims \1/g"`
echo "$line"
но он работает только, если после «1, 2, 3» ничего нет. Если же добавить какой-нибудь текст, не заменяет ничего. В чем тут загвоздка?

Deleted

Щито?
Давай так:
сначала внятные образцы входных и выходных данных, потом я подумаю, потом, по остаточному принципу, может бы посмотрим костыли что ты себе придумал

zolden ★★★★★
()
Ответ на: комментарий от zolden

line=«Пункты 1, 2, 3»
pete@crunchbang:/usr/local/bin$ tst
Claims 1, 2, 3
line=«Пункты 1, 2, 3 указаны»
line=`echo «$line»|sed «s/$pattern/Claims \1 are indicated/g»`
pete@crunchbang:/usr/local/bin$ tst
Claims 1, are indicated 2, 3 указаны

А надо Claims 1, 2, 3 are indicated. При этом количество чисел может быть произвольным.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Давай попробуем формализировать ТЗ. Какой вариант правильнее?
а) надо заменить всё что справа и слева от цифр
б) надо выдернуть цифры, и вставить их в середину другой строки

zolden ★★★★★
()
Ответ на: комментарий от zolden

б) надо выдернуть цифры, и вставить их в середину другой строки

Deleted
()
Ответ на: комментарий от Deleted

Не за что! Кстати, с такими задачами Perl лучше справляется, и если не ошибаюсь, его автор - филолог - как раз для этого его изобрёл.

x-signal ★★
()
Ответ на: комментарий от x-signal

Филолог, но сделал для администрирования. Другое дело, что многое перетащил и с логами и особо несконструированными текстами, удобно работатать

anonymous
()
Ответ на: комментарий от x-signal

Хорошо, буду иметь в виду. Perl'ом еще не владею, хотя сам филолог :) Пока с трудом пытаюсь понять логику sed :(

Deleted
()
Ответ на: комментарий от anonymous

Вот поэтому бросай sed, не берись за perl, а сразу кури python.

регэкспы везде одинаковые.

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.