Я не думаю, что это возможно с обычными мониторами VGA. Лучшее, что вы можете сделать, это определить, подключен ли VGA, и использовать DPMS, чтобы убедиться, что монитор не пытается уснуть на вас. Я не думаю, что выяснение того, отключил ли кто-нибудь монитор или отключил его от сети, можно получить с помощью программного обеспечения.
Расширенное регулярное выражение(-E
илиegrep
)не знает о \d
. Используйте -P
, как предложил @Alexander, или вместо этого используйте -E
с [0-9]
или [[:digit:]]
.
Добавьте -o
, чтобы выбрать только совпадения, а не целые совпадающие строки. Это также разобьет отдельные совпадения на новые строки.
grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' myfile.txt
или
grep -Eo '[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+' myfile.txt
с использованием Perl Regex(-P
илиpgrep
):
grep -Po '\d+\.\d+\.\d+\.\d+' myfile.txt
Если вы измените +
на *
, вы также можете использовать Basic Regex:
grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' myfile.txt
Использованиеawk
:
awk 'NF' RS='[][;]' infile
Или с помощью tr
, если вы не возражаете против первой пустой строки:
tr -s '];[' '\n' <infile
Заменить -E
на -P
и добавить-o
:
grep -P -o '\d+\.\d+\.\d+\.\d+' myfile.txt
grep
является излишним для этой задачи. tr
достаточно:
$ < input.txt tr -d '[]' | tr ';' '\n' | sort -u
Часть sort -u
удаляет повторяющиеся адреса.