Как заменить целые строки совпадающими подстроками с помощью 'sed'

Если dladm show-dev -s...выводит необходимую статистику, либо используйте команду dladm show-dev -sбез параметра -i 1, чтобы она распечатывалась только один раз, либо, если вам нужно несколько строк вывода, чтобы получить моментальный снимок текущих показателей использования, вы может тайм-аут команды.

Проще всего использовать утилиту timeout, но я не знаю, доступна ли она в Solaris 10:

timeout 5 dladm show-dev -s -i 1

В качестве альтернативы, в bash, доступном в Solaris 10:

( dladm show-dev -s -i 1 ) & sleep 5; kill $!

(Также обратите внимание, что команда dladmв Solaris 11 существенно отличается от команды dladmв Solaris 10. Я не думаю, что dladm show-dev -s...работает в Solaris 11.)

-2
23.02.2020, 04:36
2 ответа

Используйтеgrep:

grep -rhoE '[[:alnum:].!#$%&'\''*+/=?^_`{|}~-]+@[[:alnum:].]+'.

или, возможно,:

grep -rhoP '(?:[a-z0-9!#$%&'\''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'\''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])'.

(на основе информации , найденной в stackoverflow)


По вопросу:

  • Вместо использования .*попробуйте инвертировать класс символов, используемый в подвыражении. Например:
sed -nE -e 's/[^[:alnum:]._-]*([[:alnum:]._-]+@[[:alnum:]._-]+)[^[:alnum:]._-]*/\1\
/gp'
1
28.04.2021, 23:22

FWIW Я использую этот ERE (, поэтому он будет работать в grep -E, sed -E, awk, perlи т. д.):

[0-9a-zA-Z._%+-]+@[0-9a-zA-Z.-]+\.[a-zA-Z]{2,}

на основе регулярного выражения вhttp://www.regular-expressions.info/email.html. Добавьте границы слов, если ваш инструмент поддерживает их, без примера ввода/вывода я не могу предложить ничего другого для ограничения адресов электронной почты. Я специально не использую классы символов, поэтому я получаю только английские буквы, так как это лучше всего подходит для моего приложения.

0
28.04.2021, 23:22

Теги

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