我需要找到单词 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
是单词中的第一个字母。
选项-o
将grep
使其仅返回匹配的字符串,而不是整行。
选择:
$ grep -o '\<b[[:lower:]]*ch[[:lower:]]*' file
您的模式^s.*ch
将匹配任何线以同一行上的任何其他位置开头s
并包含该位置。ch