假设我在bash数组中有一个全名,我想强有力地提取姓氏和非姓氏(如果存在,则为名字和中间名)。例如,我展示了以下三个示例来表明此问题的复杂性。
x1=(John von Neumann)
x2=(Michael Jeffrey Jordan)
x3=(Michael Jordan)
有没有人有一个很好的方法来提取姓氏和非姓氏?感谢。
答案 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