使用随机文件,例如 /usr/share/vim/vim74/tutor/tutor
,有没有办法列出以 5 个字母单词 开头的所有行?以 5 个字母单词结尾的行怎么样?我已经思考这个问题有一段时间了,但目前还没有任何进展。有谁知道解决方案吗? (我不确定这是否可行,这只是一个思想实验)
答案1
grep -E '(^[[:alpha:]]{5}[^[:alpha:]]|[^[:alpha:]][[:alpha:]]{5}$)' /usr/share/vim/vim74/tutor/tutor
grep -E
使用egrep
'(a|b)'
搜索模式a
或者图案b
^
是行首,$
是行尾
[[:alpha:]]{5}
表示5个连续字母
[^[:alpha:]]
意思是不是一个字母
所以我们使用egrep来查找:
- 行首,5 个字母,然后是一个非字母;或者
- 非字母,5 个字母,然后是行尾
答案2
这有点取决于你的意思一个字,但是像
grep -E '^[[:alnum:]]{5}\b'
(五字母数字字符后跟单词边界,锚定到行的开头)或者,如果您的 grep 版本支持 Perl 兼容正则表达式 (PCRE)
grep -P '^\w{5}\b'
(五单词字符后跟一个字边界,锚定到行的开头)。对于行尾,等价物是这样的
grep -E '\b[[:alnum:]]{5}$' file
或者
grep -P '\b\w{5}$'
请注意,对于您提到的特定文件,大多数行都以前导空格开头:如果您希望忽略它,那么您需要执行类似grep -E '^[[:space:]]*[[:alnum:]]{5}\b'
或其 PCRE 等效操作grep -P '^\s*\w{5}\b'
。