3

次の bash の変数の例を検討してください。

PET="cat/DOG/hamster"

FOOD="soup/soup/PIZZA"

SUBJECT="MATH/physics/biology"

これらの文字列をスラッシュで分割し、すべて大文字の部分を抽出して変数に格納するにはどうすればよいですか? たとえば、変数DOGから取り出して$PET変数に格納するにはどうすればよいでしょう$OPTIONか。

特に bash と zsh で動作するポータブル ソリューションが必要です。

4

3 に答える 3

2

tr大文字ではないすべての文字を削除するために使用できます。

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

here-strings ( <<< $VARIABLE) はbash-ismであることに注意してください。他のシェルではecho、変数をtr次のようにする必要があります。

OPTION=$(echo "$PET" | tr -dc '[:upper:]')
于 2013-05-26T14:38:03.470 に答える
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
于 2013-05-26T14:24:10.143 に答える
2

文字列の一部だけが大文字になっているように聞こえるので、質問の分割部分は無視してかまいません。これは両方zshで動作するはずbashです (ただし、POSIX 互換性という意味では移植性はありません):

$ echo "${PET//[^A-Z]}"
DOG
于 2013-05-26T17:20:14.160 に答える