我在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;
结束答案 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
结尾的所有行,并且内部不会包含字符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
答案 3 :(得分:0)
谢谢,我完成了很长的路并且也工作了。完全忘记了“^”这是我尝试的方法:
grep –in ‘\<q.*s\>’ /usr/share/dict/words | grep –inv "a" | grep -inv "r"