Как заменить имена переменных в xml-файле? - PullRequest
1 голос
/ 26 апреля 2011

Муравей инструмент сборки Java предоставляет фильтр для замены переменных на их значения

Пример: Файл со свойствами:

db.user.name=user
db.driver=com.informix.jdbc.IfxDriver

XML-файл с общими настройками (обратите внимание на @ variable @)

<driver-class>@db.driver@</driver-class>
<user-name>@db.user.name@</user-name>

становится после копирования с использованием фильтра

<driver-class>com.informix.jdbc.IfxDriver</driver-class>
<user-name>user</user-name>

Как достичь этой функциональности с помощью инструментов bash и plain unix?

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Вы можете сделать это с очень коротким скриптом практически на любом языке - вот пример на Python:

#!/usr/bin/env python

import sys, re

if len(sys.argv) != 3:
    print "Usage: %s <mapping-file> <input-file>" % (sys.argv[0],)
    sys.exit(1)

mapping_file, input_file = sys.argv[1:]

mapping = {}

with open(mapping_file) as fp:
    for line in fp:
        m = re.search(r'^(.*?)=(.*)$',line)
        if m:
            mapping[m.group(1).strip()] = m.group(2).strip()

def replace_from_mapping(m):
    return mapping.get(m.group(1), m.group(0))

with open(input_file) as fp:
    text = fp.read()
    text = re.sub(r'@(.*?)@', replace_from_mapping, text)
    sys.stdout.write(text)
1 голос
/ 26 апреля 2011

Это другая реализация, использующая только bash. Если вы можете взять нужную вам версию на Python, я бы предложил это. Это будет легче поддерживать. В противном случае вы можете попробовать этот скрипт bash:

#!/bin/bash

config="$1"
xml="$2"

tmp=$(mktemp)

cat "$config" | while read line; do

    key=`echo $line | sed -n 's/^\([^=]\+\)=\(.*\)$/\1/p'`
    value=`echo $line | sed -n 's/^\([^=]\+\)=\(.*\)$/\2/p'`

    echo " sed 's/@$key@/$value/g' | " >> $tmp
done
replacement_cmd=`cat $tmp`
eval "cat \"$xml\" | $replacement_cmd cat"

rm -f $tmp
1 голос
/ 26 апреля 2011
sed -e 's/@db.driver@/com.informix.jdbc.IfxDriver/g' -e 's/@db.user.name@/user/g' > outfile.xml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...