如何提取全名数组中的姓氏?

时间:2015-06-13 01:47:08

标签: arrays regex bash

假设我在bash数组中有一个全名,我想强有力地提取姓氏和非姓氏(如果存在,则为名字和中间名)。例如,我展示了以下三个示例来表明此问题的复杂性。

x1=(John von Neumann)
x2=(Michael Jeffrey Jordan)
x3=(Michael Jordan)

有没有人有一个很好的方法来提取姓氏和非姓氏?感谢。

1 个答案:

答案 0 :(得分:0)

我假设您将每个名称都放在一个单独的数组中。更灵活的方法是使用正则表达式。用简单的英语,正则表达式说: - 姓氏以小写字母开头,后跟多个字母字符和空格 - 或姓氏跟随字符串中的最后一个空格。

看看这个:

#!/bin/bash

x1=(John von Neumann)
x2=(Michael Jeffrey Jordan)
x3=(Michael Jordan)
x4=(Charles-Jean Etienne Gustave Nicholas de la Vallée-Poussin)

regex="[[:space:]]([a-z]+.*|[A-Z][^[:space:]]+)$"

for i in 1 2 3 4
do
  eval name=\${"x"$i[@]}
  if [[ $name =~ $regex ]]; then
    fullname=${BASH_REMATCH[1]}
    echo $fullname
  fi
done