grep正则表达式以,结束但不包含

时间:2014-05-27 11:35:52

标签: regex linux bash grep

我在Linux中的文本文件中使用grep和sed命令。我正忙着玩Documents / Data文件夹和share / dict / words文件。我需要提取单词文件中以" q"开头的所有单词,结束" s"但不包含" a"或" r"。到目前为止,我设法获得了这段代码:

grep –n ‘\<q.*[ar]s\>’ /usr/share/dict/words

这给了我不应该包含的词语。我试过添加&#34; |&#34;然后grep -v排除下面这些单词:

grep –n ‘\<q.*s\>’ /usr/share/dict/words | grep –nv ‘\<q.*[ar]s\>’ /usr/share/dict/words

这只会返回所有其他不会在&#34; q&#34;或以&#34; s&#34;

结束

4 个答案:

答案 0 :(得分:4)

  

我需要提取单词文件中以“q”开头的所有单词,   以“s”结尾但不包含“a”或“r”。

您需要使用否定的character class

grep -n "\<q[^ar]*s\>" /usr/share/dict/words

您可能还想参考Regular expressions

答案 1 :(得分:4)

字符类[^ar]匹配不是a或r的单个字符。在q和s之间允许零或多个。

grep '^q[^ar]*s$' /usr/share/dict/words

答案 2 :(得分:0)

通过GNU sed

sed -n '/^q[^ar]*s$/p' file

它会打印以q开头并以s结尾的所有行,并且内部不会包含字符ar

示例:

$ cat cc
qars
qees
qfrs
qoos
jklo
$ sed -n '/^q[^ar]*s$/p' cc
qees
qoos

通过awk

$ awk '/^q[^ar]*s$/ {print}' cc
qees
qoos

答案 3 :(得分:0)

谢谢,我完成了很长的路并且也工作了。完全忘记了“^”这是我尝试的方法:

grep –in ‘\<q.*s\>’ /usr/share/dict/words | grep –inv "a" | grep -inv "r"