LINUX.ORG.RU

Что-то странное происходит


0

0

Делаю скриптик - надо достать из xml-файла регуляром число и заменить ее на другое число

#!/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

key=$(grep "Key" "$1" | sed 's/<\(Key\)>\([0-9]*\.[0-9]*\.[0-9]*\)<\/\1>/\2/g')

set $(echo "$key" | tr '.' ' ')

x=$3

let ++x
new_key=$1.$2.$x

echo -e "Old key:$key"
echo -e "New key\t$new_key"

Т.е. есть строчка вида <Key>120.44.289</Key>, ее надо заменить на <Key>120.44.290</Key>. Возникают странные проблемы. Когда я переменной x присваиваю любой другой отличный от $3 элемент, то все работает нормально (например $1, $2), а когда $3 то bash пишет какую-то чушь.

syntax error: Invalid arithmetic operator

Как сделать чтобы все работало?

grep лишний. sed понимает регулярное выражение

sed -n '/Key/s/..../gp' $1

Запишите $3 в файл (echo "$3" >> some_file) и посмотрите, что там.

P.S. в Development

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

\r - в винде файлик редактировал, она и поставила это.

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

Да можно, вобще, конечно, не понятно, как у вас sed'овский регескп сработал, там у вас вроде четко написано, что \.[0-9]*\)<\/\1>, то есть только цифры и дальше </Key>, почему туда попадает '\r'?

Пишите следом за первой s-командной вторую s-команду.

sed -n '/Key/s/..../gp;s/\r//'

Ну и туда же можно засунуть ";s/\./ /" и обойтисть без команды "tr", если вам $key не нужен в виде 120.44.290.

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

Спасибо.

echo "sed -i 's/<\(Key\)>\([0-9]*\.[0-9]*\.[0-9]*\)<\/\1>/<\1>$new_key<\/\1>/g' $input_file" | bash

А вот это можно как-то по человечески сделать?

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

> echo "sed -i 's/<\(Key\)>\([0-9]*\.[0-9]*\.[0-9]*\)<\/\1>/<\1>$new_key<\/\1>/g' $input_file" | bash

Необходимо провести замену в $input_file ? Проще написать как-то так:

sed -i "$input_file" 's!<\(Key\)>[0-9]*\.[0-9]*\.[0-9]*</\1>!<\1>'"$new_key"'</\1>!g'

Если "$new_key" содержит восклицательные знаки, можно заметить их на что-нибудь ещё.

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

Jesus Christ. Спасибо, пошел читать мануал.

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