设计一个正则表达式,打印出以相同的3个字母unix开头和结尾的单词列表

时间:2015-10-06 19:40:25

标签: regex unix awk sed grep

设计一个正则表达式,打印出以相同的3个字母开头和结尾的单词列表。例如: mic rocos mic ent rancem ent 等等。我需要在unix中使用它。

1 个答案:

答案 0 :(得分:1)

这是你的第一篇文章....你可以使用grep(GNU grep 2.16)

grep -E "^(.{3}).*\1$" file.txt

输入file.txt

microcosmic
hello
entrancement
world

你明白了,

microcosmic
entrancement

<强>解释

  • ^:行首
  • (...):反引用标记
  • 。{3}:前三个字母
  • 。*:无论
  • \ 1:backreference
  • $:行结尾

修改

如果,您在文本中查找以相同的3个字母开头和结尾的每个单词

 echo "microcosmic gshgshi entrancement hello world" | 
 grep -E -o "\b(.{3})\S*\1\b"

你明白了,

microcosmic
entrancement
  • \ b:正则表达式表示“单词边界”
  • \ S:这不是空格
  • -o选项:仅打印匹配的

重要提示

abcababa之类的词语不起作用,在这种情况下,您可以使用awk而不使用正则表达式

echo "microcosmic gshgshi entrancement hello world abc ababa" |  
awk 'length($0)<3{next;}
     substr($0,1,3) == substr($0,length($0)-2,3)' RS="[ \n\t]+"

你明白了,

microcosmic
entrancement
abc
ababa