Передача части шаблонов из sed в оболочку

У меня есть файл, содержит строки следующего формата:

w1 # 1 # x w2 # 4 # b w3 # 2 # d ...

Каждое слово (токен) в строке (например, w1 # 1 # x) состоит из 3 части, первая показывает некоторый индекс (в данном случае w1), вторая - целое число (в данном случае 1), а третья - символ (в данном случае x).

Теперь для каждого слова (токена) , Мне нужно напечатать дополнительное поле, которое будет вычисляться на основе значения второй и третьей части ( т.е., 4-я часть будет функцией 2-й и 3-й частей), а выходной файл должен выглядеть так:

w1 # 1 # x # f1 w2 # 4 # b # f2 w3 # 2 # d # f3 ...

где

f1 = function (1, x), f2 = function (4, b), f3 = function (2, d)

Теперь, используя шаблоны sed, я могу идентифицировать компоненты в каждом слове (токене), например,

echo $ line | sed "s / ([^ #] ) # ([^ #] ) # ([^ #] *) / \ 1 # \ 2 # \ 3 / g"

где \ 2 и \ 3 являются частями шаблона (я называю их частями шаблона из-за этой ссылки )

Теперь мне нужно вычислить четвертую часть с использованием \ 2 и \ 3. Я определил функцию оболочки getInfo (), которая принимает 2 аргумента, выполняет необходимые вычисления и возвращает мне четвертую часть. Проблема заключается в том, чтобы вставить эту функцию в команду sed. Я пробовал следующее:

echo $ line | sed "s / ([^ #] ) # ([^ #] ) # ([^ #] *) / \ 1 # \ 2 # \ 3`getInfo \ 2 \ 3` / g"

, но это не работает. Shell не получает части шаблона в качестве аргументов.

Итак, возникает вопрос:

Как передать части sed шаблона в оболочку (функцию)?

Я могу легко написать сценарий оболочки, который бы разделил строковое слово - по слову и выполнить требуемую работу, а затем сшить файл обратно, но я был бы очень признателен, если бы оболочка могла получать части шаблона в качестве аргументов от sed в команде sed.

С уважением,

Салил Джоши

5
задан Salil 29 January 2012 в 13:45
поделиться