Слова, которые заканчиваются на s, НО исключают слова, которые заканчиваются словами s

Мне нужно найти список из 5 буквенных слов, начинающихся с d (верхний или нижний регистр), а затем строчный гласный, включая y, и конец с s. Моя команда: имя файла grep -i '^ d [aeiouy] …. s $'. Я хочу исключить слова из s из моего списка, но я не знаю, как написать команду.

Чтобы избежать привязки ^$ вы можете использовать опцию -x .
d может быть верхним или нижним, но гласный просто низкий
\B означает null inside of word поэтому предыдущий символ не является символом препинания или пробелом:

 grep -x '[Dd][aeiouy]..\Bs' file 

Вы очень близки. Должен быть

 grep -i '^d[aeiouy].[^']s$' file 

Ваш номер . символов слишком много, и вы хотите исключить предпоследний символ из ' . Помните, каждый . является заполнителем для одного символа. Если ваши слова находятся в рабочем тексте, вы можете выбрать их с помощью разделителей слов \< и \> но для этого может потребоваться использовать egrep . Если вы хотите извлечь все слова в тексте, отвечающем вашему критерию, то вы должны использовать:

 sed 's/[[:space:]][[:space:]]*/\ /g' foobar | grep "^[dD][aeiouy].[^']s$" 

sed позволяет вам отделить все слова от одной строки. Обратите внимание на новую строку после \ на первой строке.

Вы можете попробовать следующее: grep -i "^d[aeiouy]...[^']s$" <file name> . Он исключает ' персонаж из последней позиции».