Сопоставление с образцом оболочки и арифметические операторы (+ - * /%)

> -Sign представляет собой I / O-перенаправление . С > stat.txt Вы перенаправляете стандартный выход (STDOUT) приложения к файлу stat.txt . Он перенаправлен, поэтому вы не увидите вывод в оболочке.

Если вы хотите вывод в текущей оболочке и файловой трубе вывод в Tee :

your_command | tee stat.txt

или ..

your_command | tee -a stat.txt

.. Чтобы добавить в файл.

Ваше приложение также может создавать некоторые ошибки. В основном они происходят в стандартной ошибке (см. стандартные потоки ). Чтобы перенаправить, что поток используйте синтаксис фольтана:

your_command 2>error.log

0
23.06.2015, 23:32
3 ответа

Без маркеров регулярное выражение (правая часть) может соответствовать любой части строки. Итак, ваш вариант соответствует 1234 . Чтобы удовлетворить требования, вы должны использовать маркеры:

[[ "1234+5678" =~ ^[0-9]+(\s*(\-|\*)\s*[0-9]+)*$ ]] ; echo $?

И короче (если хотите):

[[ "1234+5678" =~ ^[0-9\ *-]+*$ ]] ; echo $?
3
28.01.2020, 02:20

Ваше выражение возвращает 0, потому что оно соответствует первому числу. Прикрепите регулярное выражение, чтобы оно выполняло то, что вы хотите:

[[ "1234+5678" =~ ^[0-9]+( *(-|\*) *[0-9]+)*$ ]] && echo $?

Попутно: (1) вам не нужно цитировать - , и (2) \ s - это не признан ERE.

1
28.01.2020, 02:20
[[ "1234+5678" =~ [0-9]+(\s*(\-|\*)\s*[0-9]+) ]] ; echo $?

Оператор регулярного выражения * в конце вашего регулярного выражения допускает любое количество повторов выражения внутри (), также ни одного. Таким образом, вы сопоставляете [0-9] + с самого начала, а остальное необязательно.

Если удалить * или заменить его на + , выражение вернется, как ожидалось.

Кроме того, звездочка после выражения в круглых скобках означает, что от 2-й до n-й пары оператор-номер является необязательной.

Это ошибка: * означает, что любой оператор является опцией. Используйте оператор + !

Хорошо, это был не ответ, но вы можете использовать выражения и посмотреть, пуст ли результат:

echo "1234*5678"|sed 's/[0-9]\+\([ \*\-][0-9]\+\)*//'
0
28.01.2020, 02:20

Теги

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