我试图找到我的名字首字母不一定连续出现的所有单词。
我的第一个首字母应该开始这个词。
我的最后一个首字母应该结束这个词。
我的中间首字母位于单词之间
代码:
grep '^j.*x$' file
( j 是第一个声母,t 是中间词,x 是单词的结尾)
答案1
好吧,你会从
j.*t.*x
但这些.*
位会匹配任何事物。因此,将这些部分限制为仅匹配字母:
j[[:alpha:]]*t[[:alpha:]]*x
这[[:alpha:]]
是一个 POSIX 字符类大致与 相同[A-Za-z]
,即任何字母字符。
这就是你的模式。然后grep
礼貌地要求只返回完整的单词。您可以使用选项来做到这一点-w
。这会将匹配限制为每行上由非单词字符(例如空格)或行首或行尾分隔的子字符串。
-i
如果您想进行不区分大小写的匹配,请添加。
如果您只想要每行中与模式实际匹配的位而不是整行,请另外使用-o
.
你最终会得到
grep -i -o -w 'j[[:alpha:]]*t[[:alpha:]]*x'
测试:
$ grep -i -o -w 'j[[:alpha:]]*t[[:alpha:]]*x' /usr/share/dict/words
janitrix