正则表达式:查找以相同字母开头的名字和姓氏

正则表达式:查找以相同字母开头的名字和姓氏

我有一个任务,需要在文件的内容中找到包含以相同字母开头的名字和姓氏的行。我尝试过的所有操作都只搜索名字中的第一个字母,或者只是不输出任何内容。我可以获得一些关于如何处理此问题的指导吗?

需要解析的数据:

Frank Smith
Jim Jones
William Tuft
Jill Johnston
Fred White
Sue Cream
Barbara Bennett
Jeff Gordo

我用这个egrep命令弄清楚了:

egrep '(J[a-z]+ J)' addresses.txt

*出于隐私原因,我删除了地址

答案1

$ grep -E '^[[:space:]]*([[:alpha:]])[[:alpha:]]*[[:space:]]+\1' yourfile.txt

grep命令将搜索你的文件.txt为了:

  1. *行首有任意数量的空格字符(表示 0 个或更多),后跟
  2. 恰好是一个字母字符,后跟
  3. 任意数量的字母字符(*表示 0 个或更多),后跟
  4. 至少一个空格字符(+表示 1 个或多个),后跟
  5. 步骤 2 中匹配的字符。这\1反向引用到实际匹配的字符串第一的带括号的表达式。

注意:以下命令(使用基本的代替扩展正则表达式)与上面给出的效果相同:

$ grep '^[[:space:]]*\([[:alpha:]]\)[[:alpha:]]*[[:space:]]\+\1' yourfile.txt

答案2

假设有一个名字列表:

$ cat file
George Washington
Ronald Reagan
Barack Obama
Donald Trump

$ awk 'substr($1,1,1) == substr($NF,1,1)' file
Ronald Reagan

当我使用$NF(= 最后一个字段) 作为姓氏时,如果您有中间名,它会很好地工作,但如果您有像或这样Jr.的后缀,它会严重失败。Mr.Dr.

答案3

egrep '(J[a-z]+ J)' file.txt

输出:

吉姆·琼斯

吉尔约翰斯顿

相关内容