Bashは区切り文字に基づいて変数を3つの変数に分割しますか?

Bashは区切り文字に基づいて変数を3つの変数に分割しますか?

次のパターンを使用して文字列varを分割します。

TestString="Artical Title Here (ClassYear) [Author]"

次のようにcutを使ってタイトルをVarに入れることができました。

    ATH="$(cut -d'(' -f1 <<<$TestString)"
    echo $ATH

ただし、角かっこを含む(ClassYear)を別の文字列変数に入れ、角かっこを含む[Author]と同じ方法を見つけることができません。これらのフィールドと型を他の2つの変数にどのように配置できますか?

答え1

パラメータを使用した拡張bash

# remove matching suffix ` (*`    
ath="${TestString%% (*}"

# remove matching prefix `*) `
author="${TestString##*) }"

# remove matching prefix `*(`
classyear="${TestString##*(}"
# remove matching suffix ` [*` and add the missing `(`
classyear="(${classyear%% [*}"

答え2

レッスン年と作成者を取得するには、grepを使用できます。パラメータ拡張を使用してタイトルを取得することもできます。

ath=${TestString/(*)*}
year=$(grep -o '(.*)' <<<"$TestString")
auth=$(grep -o '\[.*\]' <<<"$TestString")

これはタイトルですいいえ中に括弧や大括弧がある場合、年は次のようになります。いつも括弧の中で、著者はいつもかっこ内に入れます。

これは.「すべての単一文字」に一致する正規表現タグで、*ゼロから無限に一致するように追加されます。したがって、括弧内の内容と一致する必要があります。スコープを絞り込み、クラスの年が常に可能な数である場合でも、'([0-9]+)'これはまだ広範なソリューションであり、入力に関するより多くの情報を使用してスコープをさらに絞り込むことができます。

括弧は正規表現で文字クラスを生成するので、エスケープする必要があり、文字通り一致させようとします。

関連情報