Уточните набор слов grep & regex

Правильный пакет для установки iostat будет sysstat . Итак, если вы запустите:

zypper in sysstat iotop

, будут установлены инструменты iostat и iotop .

В любом случае, вы получаете сообщение об ошибке, что вы (виртуально) не вставили DVD (образ) продукта в виртуальную машину.

1
16.11.2018, 21:56
4 ответа

Ваша проблема (ИМХО) лучше решается с помощью awk, но я просто укажу на проблему с вашей командой

grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt 

Для фильтрации содержимого файла word2.txt через оба вызова grep, это должно выглядеть так:

grep -E '^.{10}$' words2.txt | grep 'a*.e*.i*.o*.u*'

Второй шаблон grep должен быть [auoie]{3} , который приводит нас к

grep -E '^.{10}$' words2.txt | grep -E '[aouie]{3}'

. Входными данными для первого grep является ваш файл. Входные данные для второго grep — это выходные данные первого grep, не вашего файла.

Использование POSIX awk (например, последние версии GNU awk):

$ awk 'length == 10 && /[aouei]{3}/' words2.txt
unpervious
unplebeian
unportuous
unprecious
unquailing
unqueening
unquieting
unquietude

mawk, BSD awk и исторические реализации до POSIX из awk не поддерживают {n} в регулярных выражениях, как указал Стефан Шазела.

2
27.01.2020, 23:13

Вы правильно указали 10 символов, но чтобы найти 3 гласных подряд, ищите группу [AEIOU]:

egrep '^.{10}$' | egrep -i '[AEIOU]{3}'

Чтобы отбросить whitepace, используйте следующее:

egrep '^[^ \t]{10}$' | egrep -i '[AEIOu]{3}'
2
27.01.2020, 23:13

С grep, созданным с поддержкой PCRE:

grep -iPx '(?=.*[aeiou]{3}.*).{10}'

Или:

grep -wiP '(?=\w*[aeiou]{3}\w*)\w{10}'

для поиска этих слов, если они не по одному в строке (добавьте -o, если ваш grep позволяет печатать только совпадающие слова, а не всю строку, в которой они находятся). Здесь слово означает любую последовательность из слова символов (буквы (в латинском алфавите, только без диакритических знаков, добавьте (*UCP) для букв любого алфавита, хотя это по-прежнему не распространяется на гласные, такие как é или α ), цифры и подчеркивание).

1
27.01.2020, 23:13

Предположим, что 1 слово/строка, вы можете сделать это:

sed -nE '/^.{10}$/!d;/[aAeEiIoOuU]{3}/p' words.txt
2
27.01.2020, 23:13

Теги

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