如何从包含特定字符的文件中选择单词?
假设我有一个包含单词的文件,我需要包含字符a,b,c
/ upd我尝试过这个命令:grep -E "[a,b,c]*.[b]" /usr/share/dict/words
/ upd示例: file.txt包含:
qwerty
asdf
abb
bbb
zxc
abc
结果必须如下:
abb
bbb
abc
答案 0 :(得分:2)
可能这就是你要找的东西
grep -wo "[abc]*"
来自man grep
-w, - word-regexp 仅选择包含整体匹配的行 词语的
-o, - 仅匹配 仅打印匹配的匹配(非空)部分?线, 将每个这样的部分放在一个单独的输出线上。
<强>测试强>
$ cat input
qwerty
asdf
abb
bbb
zxc
abc
qweabcqwe
$ grep -wo "[abc]*" input
abb
bbb
abc
答案 1 :(得分:0)
如果您根据空格定义单词,则可以执行以下操作:
tr ' ' \\n < input-file | grep -iv [d-z]
(最初的tr只是将每个单词放在一个单独的行上)
答案 2 :(得分:0)
你的正则表达式错了。
[a,b,c]
匹配一个a
或,
或b
或,
的字符(当然,可以忽略副本)或{ {1}};并且c
指定零个或多个。所以你的表达式不需要或者其中一些,后面是文字*
(它周围的括号实际上是多余的,尽管你有时会看到b
作为文字[.]
的简写,可以等效地写成.
- 一个点本身就是一个匹配任何字符的元字符,但在字符类中,它会失去这种元字符性质。)
开箱即用,\.
将打印线上任何位置匹配的任何行。
因此grep
会匹配,因为它包含grab
,后跟a
,由您的模式指定,b
将匹配,因为它包含零个或多个{{1} }后跟boor
。
您可以通过添加[a,b,c]
选项或将正则表达式锚定在b
(行首)和-x
(结束线)。
^
或
$
(您的正则表达式不包含任何extended regular expression构造,因此grep '^[abc]*$' /usr/share/dict/words
选项无用或无用。)
由于grep -x '[abc]*' /usr/share/dict/words
每行包含一个单词,因此您可以使用“line”表示“单词”。在一般情况下,您可能需要尝试使用-E
选项来匹配单词,如@ nu11p01n73R