在BASH中搜索类似的名字

时间:2016-06-11 18:41:57

标签: bash awk

提前感谢您的帮助。我是BASH的新手,几乎完成了我的第一个shell脚本,但由于其特殊性,我遇到了一个无法找到解决方案的问题。这是问题所在:

我有一个脚本,它返回到从文本文件到变量的以下行:

NAME =“Ste e A. Johnson”

我需要使用该变量在文本文件中查找以下行并将其分配给同一个变量:

史蒂芬A.约翰逊

我相信awk可能是正确的功能,但我无法弄清楚如何使这项工作。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

这样的事可能有用:

name="Ste e A. Johnson"
name=${name// /.*}
found_name=$(grep -m1 -- "$name" filename)

这会将name中的所有空格替换为.*

Ste e A. Johnson -> Ste.*e.*A..*Johnson

然后可以将其用作grep的参数。 -m1,可能是GNU扩展,仅提供第一个匹配。

.*表示匹配任何零次或多次,因此Ste.*e.*A..*Johnson可以匹配:

Steven A. Johnson
# But also
SteeA.Johnson
Steeeeeeeeven A. Johnson
This line will Ste also be matched, Ah I understand Johnson
...

实际上,.中的A.应该转义为仅匹配文字.

name="Ste e A. Johnson"
name=${name//./\\.}
name=${name// /.*}
printf "%s\n" "$name"
Ste.*e.*A\..*Johnson
#        ^ Now the . is literal