Remove all nodes ! = значение тега

Когда вы воспроизводите сообщение, это в большинстве случаев ВЛИЯЕТ на распознавание dtmf. Единственный случай, когда это не повлияет, - это когда пользователь звонит с цифрового телефона по цифровому протоколу (sip / iax2). Если пользователь вызывает PSTN-линию, то звук в обоих направлениях идет по одному и тому же проводу, в результате воспроизведение может быть громче, чем dtmf, или иметь аналогичную частоту, что повлияет на распознавание.

Но если вы все же хотите это сделать, у вас есть 2 варианта

1) Пользователь знает о функции и нажимает ее медленно. Если это так, вы можете использовать команду чтения с ограничением цифр, установленным на 1, после этой другой команды чтения с файлом, в котором указана предыдущая цифра и т. Д. Ограничение: должно быть не менее 100 мс между цифрами в загруженном блоке, может быть меньше, если нет нагрузки.

2) Пользователь не осведомлен. Вам нужно знать c / c ++, прочитать источник звездочки (app_read.c будет достаточно) и написать другое приложение, которое будет ждать цифры и воспроизводить цифры одновременно. Швы вроде не сложные, но см. Примечание о распознавании.

3
27.10.2016, 13:04
4 ответа

Это должно сделать это :

cat /tmp/xml  | sed -e '/<FOLDER NAME=.*RS.*>/ { N; d; }'

Для каждой строки, которая соответствует шаблону между двумя символами /, выполняется код в {}. N переносит следующую строку также в пространство шаблона, а затем d удаляет все, прежде чем перейти к следующей строке. Это работает в любом POSIX-совместимом sed.

Попробуйте сделать следующее, чтобы удалить каждую строку между и :

 awk '/<FOLDER NAME=.*RS.*>/,/<\/FOLDER>/ {next} {print}' xmlfile

Команда next останавливает обработку текущего совпадения. За ней следует простая print.

2
27.01.2020, 21:21

Хорошо, серьезно - синтаксический анализ XML с помощью регулярных выражений плохая новость . XML НЕ является обычным языком, поэтому никакое регулярное выражение не может его правильно обработать. В результате все, что вы напишете, будет взломано и непрочно.

Однако XML действительно имеет нечто похожее на регулярные выражения, называемое xpath .

Чтобы решить вашу проблему, я бы сделал это так:

#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
#process the file as XML
my $twig = XML::Twig -> parsefile ( 'your_file.xml' );

#iterate 'FOLDER' elements
foreach my $folder ( $twig -> get_xpath ('//FOLDER' ) ) {
   #delete any that regex match /RS/
   if ( $folder -> att('NAME') =~ m/RS/ ) { 
      $folder -> delete;
   }
}

#print the result. 
$twig -> set_pretty_print('indented_a');
$twig -> print;
0
27.01.2020, 21:21

Вы должны сделать это с помощью анализатора XML. Например, использование XMLStarlet в командной строке:

$ xml ed -d '//FOLDER[contains(@NAME, "RS")]' data.xml
<?xml version="1.0"?>
<CONTAINER>
  <FOLDER NAME="I_R_INR">
  </FOLDER>
</CONTAINER>

Или,

$ var="I_R_INR"
$ xml ed -d "//FOLDER[@NAME != '$var']" data.xml
<?xml version="1.0"?>
<CONTAINER>
  <FOLDER NAME="I_R_INR">
  </FOLDER>
</CONTAINER>

Обратите внимание, что эти два не эквивалентны, поскольку в первом примере выполняется сопоставление подстроки, а во втором - точное совпадение.

2
27.01.2020, 21:21
sed -r '/<FOLDER NAME=.*RS.*>/{ :X N; /<\/FOLDER>/d; bX }' file
<CONTAINER>
  <FOLDER NAME="I_R_INR">
  </FOLDER>
</CONTAINER>
-1
27.01.2020, 21:21

Теги

Похожие вопросы