使用 grep 查找具有特定前缀和后缀的单词

Using grep to find words that have a certain prefix and suffix

我想弄清楚如何在文件中找到以字母 air 开头并以字母 ne 结尾的某些单词。我想将它匹配的单词打印到一个名为 "excluded" 的新文件中。我对这种命令行环境很陌生,所以我有点迷路了。我已经阅读了手册,但找不到解决方案。

我在想

grep "air" | "ne" textfile.txt

但显然没有成功。

编辑:我想我可以使用 ^$ 运算符来查找单词开头和结尾的字母,但是我不确定如何将它变成一个命令所以我可以简单地将输出粘贴到一个新文件中。

为了将单词打印到新文件中,您需要使用“>”运算符将 grep 的输出发送到文件中,因此命令为:

grep '^air.*ne$' textfile.txt > excluded.txt

或者,如果您更喜欢使用管道,则类似于:

cat textfile.txt | grep '^air.*ne$' > excluded.txt

也可以。当然,这假设您位于包含 textfile.txt.

的文件夹中

测试数据

airkinglyne\nairlamne\nhelloworld\nairfatne

输出是:

airkinglyne\nairlamne\nairfatne

grep -o '\bair[^[:space:]]*ne\b' textfile | sort | uniq > excluded

在手册页中,-o 标志“仅打印匹配行的匹配(非空)部分,每个这样的部分在单独的输出行上。”

图案组成如下: 匹配单词边缘 (\b) 然后 字符串 'air' 然后 不是 space 的东西,然后多次 字符串 'ne' 然后 另一个词 edge

然后我们排序,这样我们就可以 uniq(可以使用 sort -u)

这个想法是,一个词是一个词边,后面跟着多个非 space 个字符,后面跟着另一个词边。

这并不完美,因为它匹配的字符通常不是单词的一部分,如“airfoo_ne”、“air.barne”等,但是一旦你明白了,你就可以改进它。