使用 grep 列出文件中的某些行

使用 grep 列出文件中的某些行

使用随机文件,例如 /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'

相关内容