Я столкнулся с тем же вопросом, когда собирал auditd.log
через SplunkUniversalForwarder и для расследования в Splunk.
Поскольку @ Том Клино уже упоминал и обсуждал в аргументы auditd execve выглядят как закодированные данные , командная строка выглядит как ASCII в шестнадцатеричной кодировке.
Следовательно, его можно было бы декодировать через
echo "" | xxd -r -p
на удаленном сборщике журналов (, т.е. Splunk )позже (и если xxd
был установлен сvim
).
На мой взгляд, лучшим подходом является предварительная обработка журнала с помощью ausearch -if audit.log -i
и сбор его с помощью приложения Splunkrlog.sh
.
Мне пришлось отредактировать ваш XML, чтобы сделать его хорошо -сформированным документом (добавив элемент <root/>
и объявив пространства имен):
<?xml version="1.0"?>
<root xmlns:ns1="urn:ns1" xmlns:ns2="urn:ns2" xmlns:ns3="urn:ns3" xmlns:ns4="urn:ns4" xmlns:ns5="urn:ns5" xmlns:nd6="urn:nd6">
<ns1:account>
<ns2:name>Corporation</ns2:name>
<address>
<StrtNm>NewYork</StrtNm>
<BldgNb>3</BldgNb>
<PstCd>230300</PstCd>
<Ctry>USA</Ctry>
</address>
</ns1:account>
<ns3:details>
<ns4:accnum>
<ns5:info>
<nd6:accnum>1234567</nd6:accnum>
</ns5:info>
</ns4:accnum>
</ns3:details>
</root>
Сделав это, я могу использовать xmlstarlet
для разбора файла XML и извлечения именно того элемента, который вам нужен
xmlstarlet sel -t -v '//nd6:accnum' -n x.xml
1234567
При необходимости XPath можно изменить, сделав его более точным. Например /root/ns3:details/ns4:accnum/ns5:info/nd6:accnum
будет крайним вариантом.
Если у вас нет xmlstarlet
, я настоятельно рекомендую вам установить его. Если система не принадлежит вам, сделайте ее необходимым условием проекта, над которым вы работаете. Попытка разобрать XML-файл с помощью sed
и awk
будет работать в краткосрочной -перспективе, но это приведет к техническому долгу в будущем, особенно если у вас мало контроля над точным макетом XML-документа (. пробелы, новые строки, комментарии и т. д. ).
Используя xidel и правильный ввод xml (, см. ответ @roaima ), мы можем:
xidel -se '//nd6:accnum/text()' file.xml
где
//nd6:accnum/text()
- это выражение XPath, предназначенное для --поиска элемента "nd6 :accnum" в любом месте и выбора его текста. Эта команда -liner perl выведет ожидаемый результат:
perl -lne 'print "$1" if /<nd6:accnum>(\w+)</' file.xml
1234567