首页 > 解决方案 > 仅模式匹配字符串

问题描述

我有一个包含单词的文件

abciuf.com abdbhj.co.in abcshjkl.org.in.2 abciuf zasdg cbhjk asjk 

包括其他内容。这个词开头abci, abdb, abcs, abai 是我的要求。所以我只想要 print 开头的单词abci, abdb, abcs, abai like -abciuf.com abdbhj.co.in abcshjkl.org.in.2 abciuf Azerbaijan

我已经通过 grep 命令尝试过,但它对我没有帮助

cat /etc/xyz.txt|egrep -o "abdb*|abci*|abcs*|abai*"
cat /etc/xyz.txt|egrep -Eow "abdb*|abci*|abcs*|abai*"

标签: awksedgrep

解决方案


grep -Eo `\<(abdb|abci|abcs|abai)\S*' </etc/xyz.txt
  • \<(或\b)匹配“单词”的开头(或“单词”边界)
  • (A|B)匹配 A 或 B
  • \S*匹配零个或多个非空格字符(直到一个非非空格字符)

  • 尝试使用 grep 的-w选项是个好主意,但它对“单词”的定义过于严格(如果遇到匹配停止.

  • shell 的含义*与 grep 的不同
  • 您可以使正则表达式更短,但它变得更难阅读

推荐阅读