需要一个正则表达式来查找以一个字母开头并包含两个字母的所有单词

需要一个正则表达式来查找以一个字母开头并包含两个字母的所有单词

我需要找到单词 beach,如何指定它以 b 开头并包含 ch?我尝试过使用 grep '^s.*ch' 但会打印出包含它的行,而我只想要这个词。

答案1

您遇到的问题是.*匹配任何字符序列(可能省略换行符),包括空格。

因此,您想将其更改为仅匹配组成单词的字符。具体如何执行此操作取决于您使用的正则表达式的实现,以及您是否要考虑来自不同字母表的字符。一种合理便携的方法是使用[[:alpha:]]*

在单词开头匹配的语法也取决于实现。对于 grep 你可以使用\<.

要获取单词,有两个 grep 选项可以提供帮助,-o--color。前者仅输出匹配的内容,后者输出整行并突出显示匹配项。

所以你可能想要

grep -o '\<b[[:alpha:]]*ch' filename

答案2

$ grep -o '\<b[a-z]*ch[a-z]*' file

这将获取所有以b和 开头的单词ch。两者[a-z]*将匹配任意数量的小写字母。将\<确保 theb是单词中的第一个字母。

选项-ogrep使其仅返回匹配的字符串,而不是整行。

选择:

$ grep -o '\<b[[:lower:]]*ch[[:lower:]]*' file

您的模式^s.*ch将匹配任何线以同一行上的任何其他位置开头s并包含该位置。ch

相关内容