Когда вы воспроизводите сообщение, это в большинстве случаев ВЛИЯЕТ на распознавание dtmf. Единственный случай, когда это не повлияет, - это когда пользователь звонит с цифрового телефона по цифровому протоколу (sip / iax2). Если пользователь вызывает PSTN-линию, то звук в обоих направлениях идет по одному и тому же проводу, в результате воспроизведение может быть громче, чем dtmf, или иметь аналогичную частоту, что повлияет на распознавание.
Но если вы все же хотите это сделать, у вас есть 2 варианта
1) Пользователь знает о функции и нажимает ее медленно. Если это так, вы можете использовать команду чтения с ограничением цифр, установленным на 1, после этой другой команды чтения с файлом, в котором указана предыдущая цифра и т. Д. Ограничение: должно быть не менее 100 мс между цифрами в загруженном блоке, может быть меньше, если нет нагрузки.
2) Пользователь не осведомлен. Вам нужно знать c / c ++, прочитать источник звездочки (app_read.c будет достаточно) и написать другое приложение, которое будет ждать цифры и воспроизводить цифры одновременно. Швы вроде не сложные, но см. Примечание о распознавании.
Это должно сделать это :
cat /tmp/xml | sed -e '/<FOLDER NAME=.*RS.*>/ { N; d; }'
Для каждой строки, которая соответствует шаблону между двумя символами /
, выполняется код в {}. N переносит следующую строку также в пространство шаблона, а затем d удаляет все, прежде чем перейти к следующей строке. Это работает в любом POSIX-совместимом sed
.
Попробуйте сделать следующее, чтобы удалить каждую строку между
и :
awk '/<FOLDER NAME=.*RS.*>/,/<\/FOLDER>/ {next} {print}' xmlfile
Команда next
останавливает обработку текущего совпадения. За ней следует простая print
.
Хорошо, серьезно - синтаксический анализ 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;
Вы должны сделать это с помощью анализатора 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>
Обратите внимание, что эти два не эквивалентны, поскольку в первом примере выполняется сопоставление подстроки, а во втором - точное совпадение.
sed -r '/<FOLDER NAME=.*RS.*>/{ :X N; /<\/FOLDER>/d; bX }' file
<CONTAINER>
<FOLDER NAME="I_R_INR">
</FOLDER>
</CONTAINER>