адреса Извлечения, разделенные точкой с запятой и печатью каждый адрес в строке

Я не думаю, что это возможно с обычными мониторами VGA. Лучшее, что вы можете сделать, это определить, подключен ли VGA, и использовать DPMS, чтобы убедиться, что монитор не пытается уснуть на вас. Я не думаю, что выяснение того, отключил ли кто-нибудь монитор или отключил его от сети, можно получить с помощью программного обеспечения.

3
28.08.2018, 11:02
4 ответа

Расширенное регулярное выражение(-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
5
27.01.2020, 21:09

Использованиеawk:

awk 'NF' RS='[][;]' infile

Или с помощью tr, если вы не возражаете против первой пустой строки:

tr -s '];[' '\n' <infile
2
27.01.2020, 21:09

Заменить -Eна -Pи добавить-o:

 grep -P -o '\d+\.\d+\.\d+\.\d+' myfile.txt
3
27.01.2020, 21:09

grepявляется излишним для этой задачи. trдостаточно:

$ < input.txt tr -d '[]' | tr ';' '\n' | sort -u

Часть sort -uудаляет повторяющиеся адреса.

0
27.01.2020, 21:09

Теги

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