使用bash从文件中选择单词

时间:2015-03-11 05:18:09

标签: bash ubuntu

如何从包含特定字符的文件中选择单词?

假设我有一个包含单词的文件,我需要包含字符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

3 个答案:

答案 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

所示