我有一个任务,需要在文件的内容中找到包含以相同字母开头的名字和姓氏的行。我尝试过的所有操作都只搜索名字中的第一个字母,或者只是不输出任何内容。我可以获得一些关于如何处理此问题的指导吗?
需要解析的数据:
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为了:
*
行首有任意数量的空格字符(表示 0 个或更多),后跟- 恰好是一个字母字符,后跟
- 任意数量的字母字符(
*
表示 0 个或更多),后跟 - 至少一个空格字符(
+
表示 1 个或多个),后跟 - 步骤 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
输出:
吉姆·琼斯
吉尔约翰斯顿