2015-10-15 4 views
0

У меня есть xml-файл, в котором я ищу шаблон ниже.Sed commad не работает в sun solaris machine

<ServiceConfig Id="554"> 
<Comment>[email protected]</Comment> 
<MaxCost>0.000000</MaxCost> 
<MaxCostLocalCurrency>true</MaxCostLocalCurrency> 
<Atomic>false</Atomic> 
<TariffSwitchHandling>external</TariffSwitchHandling> 
<CdrAtTollFreeService>false</CdrAtTollFreeService> 
<BonusDuringSession>false</BonusDuringSession> 
<UserMessagesStartOfSession>true</UserMessagesStartOfSession> 
<UserMessagesDuringSession>true</UserMessagesDuringSession> 
<UseAccumulatorStartValues>false</UseAccumulatorStartValues> 
<ValidityTime Factor="1">120</ValidityTime> 
<Volume> 
<Total PreferredFactor="1024" Preferred="500" MinimumFactor="1000000" Minimum="0"></Total> 
</Volume> 
<VolumeQuotaThreshold Factor="1">0</VolumeQuotaThreshold> 
<SendQuotaHoldingTime>false</SendQuotaHoldingTime> 
<QuotaHoldingTime Factor="1">0</QuotaHoldingTime> 
<SendQuotaConsumptionTime>false</SendQuotaConsumptionTime> 
<QuotaConsumptionTime Factor="1">0</QuotaConsumptionTime> 
</ServiceConfig> 

Блок с открытыми & близкими тегами, как «ServiceConfig» &, в котором тег комментария имеет «ECS_OCS_V1_0.0.0.7» строка. для этой цели я использовал приведенную ниже команду sed.

sed -n '/<ServiceConfig Id=/ { :a /<\/ServiceConfig/! { N; ba; }; /<Comment>ECS_OCS_V1_0.0.0.7./ { p; b; }; }' ServiceConfig.xml 

Эта команда отлично работает на системе Linux, но не работает на sunOS с ошибкой ниже.

Label too long: /<ServiceConfig Id=/ { :a /<\/ServiceConfig/! { N; ba; }; /<Comment>ECS_OCS_V1_0.0.0.7./ { p; b; }; } 

Я не могу понять, в чем причина этой проблемы. Не могли бы вы помочь?

+0

Версия sed вы используете? – 123

+0

Какую версию ОС вы используете? – Cyrus

+0

Возможный дубликат [Solaris sed label too long] (http://stackoverflow.com/questions/20840661/solaris-sed-label-too-long) – Cyrus

ответ

1

На солярисе (наиболее часто настройки по умолчанию и/СЕПГ версии), ; не интерпретируются как новые линии, как на GNU СЭД, использовать реальные новую линию Especialy для печати этикеток и прыгать

sed -n '/<ServiceConfig Id=/ { 
:a 
    /<\/ServiceConfig/ !{ 
    N 
    ba 
    } 
    /<Comment>ECS_OCS_V1_0.0.0.7./ { 
    p 
    b 
    } 
    }' ServiceConfig.xml 

или использовать несколько -e параметр действия

sed -n -e '/<ServiceConfig Id=/ {' -e ':a' -e '/<\/ServiceConfig/ !{ N; ba' -e '}; /<Comment>ECS_OCS_V1_0.0.0.7./ { p; b' -e'}' -e '}' ServiceConfig.xml 
+0

Привет, спасибо за ответ .. Эта команда получает ошибку «Unrecognized command:/<\/ServiceConfig /! {N; ba" – Ankur

+0

Я забыл это, пробел перед '!' Не после. я меняю в своем ответе – NeronLeVelu

+0

извините за неприятность, но теперь его дает «слишком много» «ошибки». Хотя количество фигурных скобок соответствует ... :( – Ankur