Как выполнить поиск вхождений «[numberLargerThan5000]ms»?

Основываясь на предыдущем вопросе, упомянутом в OP, самый простой способ отправить сообщение с помощью одной командной строки выполняется следующим образом:

Самый простой способ отправить однострочное письмо -через командную строку с помощью gmail?


ВЫДЕРЖКА:

Установите ssmtpс помощью следующих команд:

sudo apt-get update
sudo apt-get install ssmtp

Затем перейдите в /etc/ssmtp и отредактируйте ssmtp.conf, чтобы он выглядел следующим образом:

root=rpi3abc@gmail
mailhub=smtp.gmail.com:465
FromLineOverride=YES
AuthUser=rpi3abc@gmail.com
AuthPass=testing123
UseTLS=YES

Отправить один -лайнер вот так:

echo "Testing...1...2...3" | ssmtp myusername@gmail.com

Когда эта часть завершена, отправить вложение с одной строкой также просто.

Сначала установитеmpack:

sudo apt-get update
sudo apt-get install mpack

затем, следуя сценарию с отправкой файла pl12.png пользователю abc@def.com, это выполняется с помощью следующей единственной командной строки:

mpack -s "12-Volt Battery Pack plot" /home/pi/python/pl12.png abd@def.com

Если файл находится в текущем каталоге, то нет необходимости использовать полный -путь.

cronЗадания всегда выполняются в домашнем каталоге пользователя, поэтому всегда рекомендуется использовать полный путь каталога к файлу вложения.


3
30.09.2018, 16:10
2 ответа

Думаю, так и должно быть:

grep -E '([5-9][0-9]{3}|[0-9]{5,})ms' | grep -v 5000ms

Как это работает?

  1. Он использует -E, поэтому регулярное выражение имеет "современный" формат (, также называемый расширенным ). В нашем случае это просто упрощает набор текста, так как мы можем сэкономить несколько \символов.
  2. (...|...)msищет две альтернативы, за которыми следует строка ms. Это необходимо, поскольку регулярное выражение не может сравнивать числа, поэтому я не могу сказать что-то вроде >= 5000.
  3. Первая альтернатива — [5-9][0-9]{3}, которая будет соответствовать любой строке, которая начинается с числа от 5 до 9, за которым следуют 3 вхождения чисел от 0 до 9. Это все числа >= 5000 и < 10000.
  4. Второй вариант будет соответствовать строке из 5 или более цифр, то есть любому числу >= 10000.
  5. В конце мы передаем результат в grep -v 5000ms, чтобы отфильтровать любое вхождение 5000ms, потому что вы сказали больше чем 5000. Если вы хотите больше или равно, просто оставьте это.

Где узнать больше?

Считайте man 1 grepи man 7 regex.

2
27.01.2020, 21:21

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

gawk -v x=5000 'match($0,/([0-9]+)ms/,a) && a[1]+0 > x' file.log

или

perl -ne 'print if /(\d+)ms/ && $1 > 5000' file.log
1
27.01.2020, 21:21

Теги

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