2013-09-19 3 views
0

Я хотел бы подставить значения атрибутов XML, соответствующих регулярному выражению, в файле в bash.Как заменить значение атрибутов xml, соответствующих регулярному выражению в bash?

<Resource name="MailSession" auth="Container" type="javax.mail.Session" 
      mail.smtp.host="localhost" mail.smtp.user="foo" mail.smtp.passwd="12345678" 
      mail.pop3.host="localhost" mail.pop3.user="foo" mail.pop3.passwd="12345678"/> 

должны быть преобразованы в

<Resource name="MailSession" auth="Container" type="javax.mail.Session" 
      mail.smtp.host="***" mail.smtp.user="foo" mail.smtp.passwd="***" 
      mail.pop3.host="***" mail.pop3.user="foo" mail.pop3.passwd="***"/> 

Это должно быть возможным с помощью СЭД или AWK.

+0

Возможный дубликат [регулярное выражение для замены атрибута XML] (http://stackoverflow.com/questions/780445/regular-expression-to-replace-an-xml-attribute) – tripleee

ответ

4

Я бы моя SED команды:

sed -E '[email protected](mail[.][^.]+[.])(host|passwd)="[^"]*"@\1\2="***"@g' file 

Выход:

<Resource name="MailSession" auth="Container" type="javax.mail.Session" 
      mail.smtp.host="***" mail.smtp.user="foo" mail.smtp.passwd="***" 
      mail.pop3.host="***" mail.pop3.user="foo" mail.pop3.passwd="***"/> 

Вы можете добавить -i вариант СЭД для непосредственного изменения файла.

+0

Спасибо, это было полезно. – mtsz

1

Если файл XML называется «test.xml» вы можете:

cat test.xml | sed 's/host="[^"]*/host="***/g' | sed 's/passwd="[^"]*/passwd="***/g' 

Если вы читаете файл из другого места (например, соединение HTTP, или любой другой), вы можете изменить первую команду труба.

+0

Спасибо, это действительно работает. – Darius

1

Использование awk

awk -F\" '/host/ {$2=$6="***"}1' OFS=\" file 
<Resource name="MailSession" auth="Container" type="javax.mail.Session" 
      mail.smtp.host="***" mail.smtp.user="foo" mail.smtp.passwd="***" 
      mail.pop3.host="***" mail.pop3.user="foo" mail.pop3.passwd="***"/> 
Смежные вопросы