拆分一个字符串并选择大写子字符串

时间:2013-05-26 13:59:16

标签: string bash split zsh uppercase

在bash中考虑以下示例变量:

PET="cat/DOG/hamster"

FOOD="soup/soup/PIZZA"

SUBJECT="MATH/physics/biology"

如何通过斜线拆分任何字符串,提取全部大写的部分并将其存储在变量中?例如,如何从DOG变量中取出$PET并将其存储在$OPTION变量中?

我需要一个可以在bash和zsh下运行的便携式解决方案。

3 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情 -

OPTION=$(gawk -F'/' '{for (i=1;i<=NF;i++) if ($i ~ /\<[A-Z]+\>/) print $i}' <<< $PET)

如果您喜欢纯bash解决方案,那么您可以添加以下代码

#!/bin/bash

PET="cat/DOG/hamster"
IFSBK=$IFS
IFS='/'
for word in $PET; do
    if [[ $word =~ [A-Z]+ ]]; then
        OPTION="$word"
    fi
done
IFS=$IFSBK

答案 1 :(得分:2)

您可以使用tr删除所有非大写的字符:

OPTION=$(tr -dc '[:upper:]' <<< $PET)

请注意,here-strings<<< $VARIABLE)是bash - 主义。在其他shell中,您必须将变量echo变为tr

OPTION=$(echo "$PET" | tr -dc '[:upper:]')

答案 2 :(得分:2)

听起来只有一部分字符串是大写的,所以你可以忽略问题的分裂部分。这应该适用于zshbash(虽然它在POSIX兼容性方面不可移植):

$ echo "${PET//[^A-Z]}"
DOG