以 s 结尾的单词,但排除以 s 结尾的单词

以 s 结尾的单词,但排除以 s 结尾的单词

我需要找到以 d(大写或小写)开头,后跟包括 y 在内的小写元音并以 s 结尾的 5 个字母单词的列表。我的命令:grep -i '^d[aeiouy]....s$' 文件名。我想从列表中排除带有 's 的单词,但我不知道如何编写命令。

答案1

你们非常接近。它应该是

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

您的字符数.太多,并且您想排除倒数第二个字符'。请记住,每个.都是一个字符的占位符。如果您的单词在运行文本中,您可以通过单词分隔符来选择它们\<\>但可能必须使用egrep它。如果你想提取运行文本中符合你的标准的所有单词,那么你应该使用:

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

sed允许您单独分隔一行上的所有单词。注意\第一行后面的换行符。

答案2

为了避免锚点,^$您可以使用-x选项。
d可以是大写或小写,但元音只是小写
\B意味着null inside of word前面的符号不是任何标点符号或空格:

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

答案3

你可以试试这个:grep -i "^d[aeiouy]...[^']s$" <file name>。它将'角色从最后一个位置中排除。

相关内容