在bash中考虑以下示例变量:
PET="cat/DOG/hamster"
FOOD="soup/soup/PIZZA"
SUBJECT="MATH/physics/biology"
如何通过斜线拆分任何字符串,提取全部大写的部分并将其存储在变量中?例如,如何从DOG
变量中取出$PET
并将其存储在$OPTION
变量中?
我需要一个可以在bash和zsh下运行的便携式解决方案。
答案 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)
听起来只有一部分字符串是大写的,所以你可以忽略问题的分裂部分。这应该适用于zsh
和bash
(虽然它在POSIX兼容性方面不可移植):
$ echo "${PET//[^A-Z]}"
DOG