У меня есть hdfs-site.xml
файл, который содержит следующую информациюСЕПГ регулярное выражение заменяет весь файл
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/data/dfs/nn</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data/dfs/dn,/mnt_test_volume/data/dfs/dn,/mnt_test_volume/data/dfs/dni,/mnt_test_v5olume/data/dfs/dn,/mnt_test_volume/d5ata/dfs/dgn</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
Я хочу, чтобы удалить некоторые из записей, присутствующих в <name>dfs.data.dir</name><value>
и </value></name>
тегов. Какая запись для удаления определяется одним параметром для сценария оболочки.
Я новичок в sed
, и я написал следующую команду sed
, чтобы найти конкретную запись и удалить ее. Это работает так, как ожидалось, когда sed
выполняется в первый раз, но когда такая же команда выполняется в следующий раз, все содержимое файла уничтожается, а файл становится пустым.
sed -ni '1h; 1!H; ${g; s#\(<name>dfs\.data\.dir<\/name>[^a-zA-Z0-9]*<value>.*\)'$data_dir_path'[^,<]\(.*<\/value>\)#\1\2# p}' hdfs-site.xml
В этой переменной команда $data_dir_path
решает, какая запись будет удалена.
Например, если значение data_dir_path
является /mnt_test_volume/data/dfs/dn
то я ожидаю следующего вывода
<name>dfs.data.dir</name> <value>/data/dfs/dn,,/mnt_test_volume/data/dfs/dni,/mnt_test_v5olume/data/dfs/dn,/mnt_test_volume/d5ata/dfs/dgn</value>
, которая работает хорошо, когда команда выполняется один раз, но если же команда выполняется в следующий раз, весь файл становится пустым.
Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно здесь?
'sed' - это неправильный инструмент для управления XML – anubhava
использовать' awk' для определения и замены определенного выражения. – Skynet
@anubhava, Каков надлежащий инструмент для обработки XML в сценарии оболочки? Я новичок в сценариях оболочки, поэтому я действительно не знаю подходящего инструмента для этого. – Shekhar