Попробуйте это:
sed -e '/333/!{' -e 's#<AccountNumber>[0-9]*</AccountNumber>#<AccountNumber>333333333</AccountNumber>#;s#<BranchNumber>[0-9]*</BranchNumber>#<BranchNumber>33333</BranchNumber>#;}'
Например:
$ sed -e '/333/!{' -e 's#<AccountNumber>[0-9]*</AccountNumber>#<AccountNumber>333333333</AccountNumber>#;s#<BranchNumber>[0-9]*</BranchNumber>#<BranchNumber>33333</BranchNumber>#;}' test.txt
<Info>
<AccountNumber>333333333</AccountNumber>
<BranchNumber>33333</BranchNumber>
<TransitNumber>01646</TransitNumber>
<NameAndCity>XYZ Bank</NameAndCity>
<OwnerFullName>ABC XYZ</OwnerFullName>
</Info>
Очень простой способ, если вы тестируете нормально и хотите изменить файл на месте, добавьте переключатель -i
.
У меня нет Solaris для тестирования, поэтому я не уверен.
Попробуйте этот простой perl
один, посмотрите, работает ли он:
perl -pe 's#<AccountNumber>[0-9]*</AccountNumber>#<AccountNumber>333333333</AccountNumber>#' test.txt
Если он работает, мы можем добавить другие.
Итак, для вашей логики сначала написано ввопрос, это должно быть так:
perl -pe 'unless (/333/) {s#<AccountNumber>[0-9]*</AccountNumber>#<AccountNumber>333333333</AccountNumber>#;s#<BranchNumber>[0-9]*</BranchNumber>#<BranchNumber>33333</BranchNumber>#;}' test.txt
Вы можете добавить другие замены самостоятельно.#
должен заменить обычный /
из s
, более простой способ избежать экранирования /
в тегах закрытия (IE s#from#to#;
).
Это довольно просто, так что я думаю, что у вас будетбез затруднений:)
Добавить -i
переключатель, чтобы изменить место, как это: perl -i -pe '...
.