Grep regex开始于,结束于,但不包含



我在Linux的文本文件中使用grep和sed命令。我正忙着摆弄文档/数据文件夹和共享/字典/单词文档。我需要提取单词文件中以"q"开头,以"s"结尾但不包含"a"或"r"的所有单词。到目前为止,我已经设法得到了这段代码:

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

给了我不应该包含的词。我试过添加一个"|",然后grep -v来排除这些单词,如下所示:

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

返回所有不以"q"开头或以"s"结尾的单词

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

你需要使用一个反字符类:

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

您可能还想引用正则表达式

字符类[^ar]匹配一个非a或r的字符。在q和s之间允许0个或多个字符。

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

谢谢你,我花了很长时间才完成的。完全忘记了"^"这是我尝试的方法:

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

通过GNU sed

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

打印以q开头以s结尾的所有行,并且不包含字符a, r

的例子:

$ 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

最新更新