Подсчет отличительных XML шаблонов в блокноте ++ или Linux Grep - PullRequest
0 голосов
/ 14 февраля 2020

Это глупый вопрос, но я пока не могу найти ответ.

В моем XML у меня есть следующие строки:

<BLAH><BLAH><BLAH>
<ABC>123456</ABC>
<ABC>123456</ABC>
<ABC>adfadfaf</ABC>
<ABC>gdsgdhghd</ABC>
</BLAH></BLAH></BLAH>

Различное количество образцов в <ABC>*</ABC> - 3.

По сути, я хочу подсчитывать уникальные значения между <ABC> и </ABC> 3, когда я выполняю поиск и подсчет в блокноте ++ или в Linux команде grep.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Предполагая, что вход имеет формат, как показано в примере, вы можете использовать код ниже.

Это означает, что каждая комбинация соответствующих тегов <ABC> и </ABC> должна находиться в одной строке с текстовым значением между ними.

grep -o '<ABC>[^<]*</ABC>' input.xml |sort -u|wc -l

Команда может не работать, если входные данные отформатированы другими способами, или если значение между <ABC> и </ABC> содержит другие теги.

При использовании примера ввода из вопроса будет напечатано

3

Это даже работает когда в строке более одной пары <ABC> и </ABC>.

с

<BLAH><BLAH><BLAH>
<ABC>123456</ABC>foo<ABC>1234567</ABC>
<ABC>123456</ABC>
<ABC>adfadfaf</ABC>
<ABC>gdsgdhghd</ABC>
</BLAH></BLAH></BLAH>

выводит

4
1 голос
/ 14 февраля 2020

Это будет только , если заказано <ABC>...</ABC>.

  • Ctrl + F
  • Найдите что: (<ABC>.+?</ABC>)\R(?!\1)
  • ПРОВЕРКА Соответствие регистра
  • ПРОВЕРКА Обтекание
  • CHECK Регулярное выражение
  • UNCHECK . matches newline
  • Счет

Снимок экрана:

enter image description here

...