2015-08-12 8 views
0

Я пытаюсь подставить значение атрибутов с помощью команды sed,
, но это значение можно заменить без пробелов.Подстановка значения атрибута командой sed

образец входного XML:

<BillingAddress11300000 Tag="11300000" SectionID="BLA" CustAddrName="CLAUDIA LUCIA DE ALMEIDA" CustAddrStreet="AV ENGENHEIRO RICHARD" CustAddrState="RJ" CustAddrZip="20561-090" CustAddrStreetNo="64" CustAddrComplement="APTO 303" CustAddrCity="RIO DE JANEIRO" CustAddrCounty="GRAJAU"/> 

Замещение следует использовать имя атрибута для обработки и значение, чтобы изменить этот атрибут из ранее переменных, которые были ранее прочитанных в

Нужный выход. (за $ АТТ = "CustAddrName" и $ значение = "Родриго де Сильва"):

<BillingAddress11300000 Tag="11300000" SectionID="BLA" CustAddrName="Rodrigo DE Silva" CustAddrStreet="AV ENGENHEIRO RICHARD" CustAddrState="RJ" CustAddrZip="20561-090" CustAddrStreetNo="64" CustAddrComplement="APTO 303" CustAddrCity="RIO DE JANEIRO" CustAddrCounty="GRAJAU"/> 

Я использовал следующий сценарий

#!/bin/bash 
echo "Enter the attribute name" 
read att 
echo "enter new value" 
read value 
sed "s|$att\=\S*\S|$att=\"$value\"|g" test.xml>>out.xml** 

С помощью этого скрипта можно заменить значение атрибута на этот код, если текущее значение атрибута не имеет места. Но это невозможно, если значение имеет пробел.

Как реализовать этот сценарий?

+2

Обратите внимание на [edit-help] (http://stackoverflow.com/editing-help). – Cyrus

+1

@ EdMorton Смешно, OP действительно обеспечивал желаемый выход. Однако он был скрыт за неудачей форматирования. Кир был прав, вероятно, более чем осознавал. – Yunnosch

ответ

0

Вы хотите заменить значение атрибута, содержащего .
Ваша линия sed, однако, выглядит экзистенциально для не-пробелов, через регулярное выражение \S*\S.

Вы должны изменить поиск «все, кроме», в пределах пары «».
Для этого вы можете использовать:

sed "s|$att\=\"[^\"]*\"|$att=\"$value\"|g" 

Выход для данного XML-строки и $att = "CustAddrName" и $value = "новое значение" является:

<BillingAddress11300000 Tag="11300000" SectionID="BLA" CustAddrName="new value" CustAddrStreet="AV ENGENHEIRO RICHARD" CustAddrState="RJ" CustAddrZip="20561-090" CustAddrStreetNo="64" CustAddrComplement="APTO 303" CustAddrCity="RIO DE JANEIRO" CustAddrCounty="GRAJAU"/> 

Однако, на самом деле лучше способ манипулирования XML использует XML-парсер или преобразование XSL.

Смежные вопросы