我在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