【发布时间】:2018-11-25 10:16:49
【问题描述】:
我一直很难将正则表达式锁定在 bash 中。我正在编写一个脚本,该脚本旨在读取包含名称列表的文件。我打算验证每个名称。
文件是这样的:
John, Smith
Jane, Doe S.
stan, smith
有效名称的格式如下:
- 必须用逗号分隔姓氏和名字。
- 名字必须以大写字母开头,后跟小写字母(姓氏也是如此)。
- 中间名首字母是可选的,但如果确实存在,则它必须是大写字母并且后面必须跟一个句点 (
.)。
这意味着只有文件中的前两个名称有效。 我已经拖了一段时间了。有人可以帮忙吗?
我尝试过诸如
之类的表达方式if [[ "${name}" =~ "^[A-Z]{1}[a-z]" ]]
至少验证姓氏。但这显然行不通。
【问题讨论】:
-
没错! @Aaron 但它说所有这些都是无效的
-
嗯,实际上
^似乎没有被理解为元字符引用模式时:[[ "foo" =~ "^foo" ]] && echo ok失败,而[[ "foo" =~ ^foo ]] && echo ok成功 -
@Aaron 你是对的,如果模式被引用,它被解释为字符串,而不是模式。
-
@Aaron 删除引号确实有点帮助。现在我看到了一条可以遵循的道路。谢谢